php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-10-2010, 18:54
Skywalker077
 Newbie
Links : Onlinestatus : Skywalker077 ist offline
Registriert seit: Dec 2007
Beiträge: 133
Skywalker077 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Tabellen verknüpfen

Guten NAbend,

In meinem letzten praktikum habe ich mit MS Access arbeiten müssen.
Dort habe ich die 1-n verbindung etc. kennen gelernt.
Diese möglichkeit wollte ich in meinem neuen übungs Projekt einbauen.

Ich weiß nur nicht wirklich wie ich in einer SELECT Abfrage die Tabellen verknüpfen soll.

Ich habe nur durchs Googeln herrausgefunden das der Befehl was mit "Join" oder "Leave Join" zutun hat.

PHP-Code:
$query mysql_query('SELECT
                                    ID,
                                    username
                                FROM
                                    news
                                JOIN
                                    newscoment ON
                                    ID.ID_news'

Als Beispiel habe ich News und die News Kommentare.
Bei der Tabelle der Kommentare gibt es eine Spalte ID_news.
In dieser Spalte wird die ID der News gespeichert, um diese zuzuordnen.
Um diese Auszulesen, habe ich vor die ID der News auf als Suchkriterium in der ID_News Spalte zu benutzen.

Ich hoffe, ich konnte mein Anliegen gut genug vortragen und hoffe auf aufklärung.

PS: Ich lese in immer mehr Tutorials, das die EInfühung in MYSQL mit Objekten gemacht wird. Wo liegt dort er Vorteil? Lohnt es sich diese zu lernen oder ist es sicherer beim "alten" Style zu bleiben?

Gruß Sky
__________________
Leute die Angst vor dem Tod haben, sind Menschen die sich an einen Traum im Leben klammern
Mit Zitat antworten
  #2 (permalink)  
Alt 25-10-2010, 20:14
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

leave join gibt es nicht, aber left join (das hat trotzdem nichts mit verlassen zu tun, sondern mit links/rechts).

Die on-Klausel ist bei dir unvollständig. Du musst darin im Normalfall die Schlüssel beider Tabellen vergleichen, z. B.
Code:
SELECT person.name, telefon.nummer
FROM person
LEFT JOIN telefon ON telefon.person_id = person.id
(Im Beispiel: Tabelle person mit id, name, ... und Tabelle telefon mit id, person_id, nummer.)

Ich rate zu PDO, weil es sauberer und sicherer ist und sich schöner in eine objektorientierte Projektumgebung einfügt (Ableitung, Exceptions, etc.). Außerdem lässt es sich super leicht umstellen, wenn man plötzlich mal auf ein anderes DBMS als MySQL umstellen muss.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (25-10-2010 um 20:17 Uhr) Grund: SQL-Kommandos auf Großschreibung geändert
Mit Zitat antworten
  #3 (permalink)  
Alt 25-10-2010, 22:33
Skywalker077
 Newbie
Links : Onlinestatus : Skywalker077 ist offline
Registriert seit: Dec 2007
Beiträge: 133
Skywalker077 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Amica entschuldige, aber ich verstehe das nicht!

Gibt es ein gutes Tutorial dazu?

Sonst müssten wir eventuell bitte genauer auf die Tabellen Struktur eingehen.

Sky
__________________
Leute die Angst vor dem Tod haben, sind Menschen die sich an einen Traum im Leben klammern
Mit Zitat antworten
  #4 (permalink)  
Alt 25-10-2010, 22:39
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hast du das MySQL Handbuch schon gelesen? Da ist das Thema Joins erklärt. Auch Wikipedia kennt das Thema: Join (SQL) - Wikipedia, the free encyclopedia

Wenn du trotzdem noch Fragen hast, bitte etwas konkreter werden.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 25-10-2010, 22:50
Skywalker077
 Newbie
Links : Onlinestatus : Skywalker077 ist offline
Registriert seit: Dec 2007
Beiträge: 133
Skywalker077 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Genau, diese Seite habe ich auch gelesen. Ich muss zugeben mein Englisch ist noch nicht das beste - vll. schaffe ich nach meinem Wehrdienst es nachzuholen.

Jedoch...

Wir haben 2 Tabellen:
-News:
-ID
-titel
-autor
-beitrag

und
-newscomment:
ID
ID_news
beitrag

Wenn ich dein im ersten Post geschriebenes richtig verstehe müsste es so sein:
PHP-Code:
$query mysql_query('SELECT
                                    ID,
                                    username
                                FROM
                                    news
                               LEFT JOIN
                                    newscomment ON
                                    ID.ID_news = ID_news'

Dennoch verstehe ich die bedeutung nicht! Auch die Erklärung auf dieser Seite unter Anzeigen zu Join verstehe ich nicht. Wo ist da der zusammenhang?
Vielelicht ist es auch wieder nur der kleine Sprung zum Verständnis!

Sky
__________________
Leute die Angst vor dem Tod haben, sind Menschen die sich an einen Traum im Leben klammern
Mit Zitat antworten
  #6 (permalink)  
Alt 25-10-2010, 23:14
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wie die on-Klausel in deinem Falle jetzt richtig aussehen muss, findest du unten. Da du aber mehrere Tabellen in der Abfrage enthalten hast, solltest du als nächstes die Spaltenreferenzen (zwischen select und from) in der Form tabellenname.spaltenname angeben, da MySQL sonst nicht weiß, welche Spalte (bei gleichnamigen) gemeint ist. In deinem Falle betrifft das vor allem die ID.

Zur Bedeutung:

Code:
SELECT                               -- Ruf die folgenden Spalten
    ID,                              -- 
    username                         -- 
FROM news                            -- von der Tabelle news
LEFT JOIN newscomment                -- verbunden mit der Tabelle newscomment ab.
    ON newscomment.ID_news = news.ID -- Kombiniere die beiden Tabellen als Kreuzprodukt* mit der
                                     -- Einschränkung, dass nur die Elemente verwendet werden, bei
                                     -- denen die ID_news aus der Tabelle newscomment mit der ID aus
                                     -- der Tabelle news übereinstimmt.
                                     -- Wegen des LEFT werden aber auch news aufgenommen, die keine
                                     -- newscomments haben.
* Ein Kreuzprodukt ist die Kombination jeder mit jedem, z. B.
(rot, grün, blau) mit (Blume, Teller, Auto) ergibt im Kreuzprodukt
(rote Blume, roter Teller, rotes Auto, grüne Blume, grüner Teller, grünes Auto, blaue Blume, blauer Teller, blaues Auto)

In deinem Falle würde also ohne eine einschränkende on-Klausel jede news mit jedem newscomment kombiniert werden, was natürlich von der gemeinten Logik her falsch wäre.

Daher musst du einschränken, welche Kombinationen erlaubt sind. Üblicherweise sind das diejenigen, bei denen der Fremdschlüsselwert einer Tabelle gleich dem Primärschlüsselwert der anderen ist. Dadurch ergibt sich obige on-Klausel.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (25-10-2010 um 23:17 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 25-10-2010, 23:31
Skywalker077
 Newbie
Links : Onlinestatus : Skywalker077 ist offline
Registriert seit: Dec 2007
Beiträge: 133
Skywalker077 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Amica, geile erklärung!

Ich vermute es jetzt kapiert zu haben! Ich werde es Nachmittag versuchen anzuwenden. Danke dir!

Sky
__________________
Leute die Angst vor dem Tod haben, sind Menschen die sich an einen Traum im Leben klammern
Mit Zitat antworten
  #8 (permalink)  
Alt 28-10-2010, 14:01
Skywalker077
 Newbie
Links : Onlinestatus : Skywalker077 ist offline
Registriert seit: Dec 2007
Beiträge: 133
Skywalker077 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

Ich habe das Ausprobiert. Es gab auch keine Fehlermeldung mehr, aber er findet immer 0 Einträge. Dann habe ich es auf die alternativen Art gemacht
PHP-Code:
$kommentarresult mysql_query('SELECT
                                            ID,
                                            beitrag
                                        FROM
                                            newskommentar
                                        WHERE
                                            ID_news //in welcher Spalte es ausgelesen werden soll
                                        LIKE
                                            "'
.$row['ID'].' "'); //ID Der NEWS als suche benutzen
        
$newsbeitrag['kommentarmenge'] = mysql_num_rows($kommentarresult);
        
var_dump($newsbeitrag['kommentarmenge']); 
Die Ausgabe ist int(0) int(0) int(0) int(0) int(0)

Wo liegt mein denkfehler? Oder habe ich gar einen Fehler gemacht?
__________________
Leute die Angst vor dem Tod haben, sind Menschen die sich an einen Traum im Leben klammern
Mit Zitat antworten
  #9 (permalink)  
Alt 28-10-2010, 19:01
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Was daran falsch ist, kann ich nicht erkennen, aber IDs vergleicht man auf keinen Fall mit LIKE, man setzt sie (wenn sie wie meist numerisch sind) auch nicht in Anführungszeichen. Davon abgesehen verwendet man LIKE nie ohne Wildcards, denn dann kann man gleich das schnellere = nehmen.

Hast du diese Abfrage einfach mal in PHPMyAdmin ausprobiert? Was passiert dort? Hast du alle Variablen auf deren Inhalt (var_dump) überprüft? Wie ist dein Error-Reporting eingestellt (siehe Forenregeln). Fragst du mit mysql_error() immer brav die Fehlermeldungen der DB ab?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #10 (permalink)  
Alt 28-10-2010, 23:17
Skywalker077
 Newbie
Links : Onlinestatus : Skywalker077 ist offline
Registriert seit: Dec 2007
Beiträge: 133
Skywalker077 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Entschuldige, heute war der geburtstag der Großmutter...

Also soweit ich dir deine Frage zur findung meines Problems erklären kann:

Das Errorreporting ist nach dem Quark aufgebaut.

Die Tabellenabfrage habe ich wie im Muster gemacht. Nur das dort noch OR die(....) steht.

Ich habe natürlich die Variable $row['ID'] überprüft, diese ist aber korrekt!
Kann es mir wirklich nicht erklären selbst mit gut angeheitertemkopf.

Gruß Sky
__________________
Leute die Angst vor dem Tod haben, sind Menschen die sich an einen Traum im Leben klammern
Mit Zitat antworten
  #11 (permalink)  
Alt 28-10-2010, 23:28
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Erstens kann man auch direkt das entsprechende Kapitel verlinken, so dass deine Helfer sich nicht erst selbst dort durch wühlen müssen.

Zweitens ist es genau dieses
PHP-Code:
or die(mysql_error()) 
, das die Fehlermeldungen von der DB abfragt, was du offenbar nicht machst.

Falls du noch nicht auf mysql_*-Funktionen festgenagelt bist, rate ich dir sowieso zu PDO und diesem Code:
PHP-Code:
$pdo = new PDO(/* ... */);
$pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION); 
Wenn du wieder nüchtern bist, kannst du ja mal die anderen Fragen beantworten und die Forenregeln lesen, da steht das mit dem "or die()" nämlich auch drin und die sind hier im Forum nicht umsonst Pflichtlektüre
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #12 (permalink)  
Alt 29-10-2010, 11:30
Skywalker077
 Newbie
Links : Onlinestatus : Skywalker077 ist offline
Registriert seit: Dec 2007
Beiträge: 133
Skywalker077 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Wenn du wieder nüchtern bist, kannst du ja mal die anderen Fragen beantworten und die Forenregeln lesen, da steht das mit dem "or die()" nämlich auch drin und die sind hier im Forum nicht umsonst Pflichtlektüre
Das ist mir bekannt. ! Das habe ich auch gemacht. Wie in meinem vorherigen Beitrag halb zu lesen ist! Die Datenbank gibt keinen Fehler aus.

Du hast aber bereits den Fehler gefunden. Es lag daran, das ich es mit LIKE gemacht habe!
__________________
Leute die Angst vor dem Tod haben, sind Menschen die sich an einen Traum im Leben klammern
Mit Zitat antworten
  #13 (permalink)  
Alt 29-10-2010, 12:07
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Skywalker077 Beitrag anzeigen
Das habe ich auch gemacht. Wie in meinem vorherigen Beitrag halb zu lesen ist!
Ok, ich dacht, das hättest du weggelassen, weil du geschrieben hattest:

Zitat:
Zitat von Skywalker077 Beitrag anzeigen
Nur das dort noch OR die(....) steht.
Und, hast du PDO schon angeschaut? Viel besser als die mysql_*-Funktionen, oder?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #14 (permalink)  
Alt 29-10-2010, 12:46
Skywalker077
 Newbie
Links : Onlinestatus : Skywalker077 ist offline
Registriert seit: Dec 2007
Beiträge: 133
Skywalker077 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, ich habe mir PDO mir angeschaut und direkt einen Anfall bekommen

Da ich mit dem Wiki alleine nicht viel Anfangen konnte habe ich bei Google, mir dieses Tutorial rausgesucht. Ich werde es mir nachdem ich meine Winterreifen drauf gezogen habe mal anschauen. Ich wette das ich dann deine Hilfe wieder brauche =)
__________________
Leute die Angst vor dem Tod haben, sind Menschen die sich an einen Traum im Leben klammern
Mit Zitat antworten
  #15 (permalink)  
Alt 29-10-2010, 16:06
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Dieses von dir verlinkte Tutorial würde ich keiner Beachtung würdigen, nachdem ich mal einen kurzen Blick drauf geworfen hab. Davon abgesehen hilft es auch nicht beim Einstieg in PDO an sich, es sorgt nur dafür, dass weitere Generationen von Neulingen glaubt, dass Singletons eine gute Lösung für praktisch alles wären, was wir hier im Forum nicht unterstützen wollen

Die Beispiele im Handbuch geben einen recht guten Überblick. Gelesen sollte man die Doku trotzdem mal haben, danach dient sie als Nachschlagewerk. Bei konkreten Fragen einfach die übliche Kette einhalten: Google, Forensuche, neuer Beitrag (bzw. gleich hier im Thread antworten). Ich weiß schon, gegoogelt hast du ja, aber die haben dich irregeführt, weil es keine Einführung in PDO ist, sondern (imho) eine Einführung in schlechte Programmierung, die zufällig PDO benutzt.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Tabellen verknüpfen S.O.S! tinasharma18hh SQL / Datenbanken 5 06-04-2010 13:41
Tabellen verknüpfen hasch SQL / Datenbanken 11 17-07-2006 15:22
Tabellen verknüpfen michl05 SQL / Datenbanken 1 23-04-2006 14:19
Tabellen verknüpfen Adler SQL / Datenbanken 11 28-08-2003 13:04
Werte aus 2 Tabellen abfragen/Tabellen verknüpfen?! Steffen18 SQL / Datenbanken 7 03-01-2003 15:44

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:45 Uhr.