SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 18.05.2006, 01:53:07
Skyman Skyman ist offline
Anfänger
 
Registriert seit: Jul 2003
Ort: NRW
Beiträge: 76
Abfrage aus zwei Tabellen

Hallo Gemeinde,

ich verzweifel gerade mal wieder an der Zusammenstellung einer Suchabfrage, bei der Daten aus zwei Tabellen gelesen und verarbeitet werden müssen.

Ausgang:
Tabelle "person", Personendaten wie Name, Adresse, Zusätze...:
id|Name |...|werde_id|...
--+-----+--+--------+---
12|Müller|...| 38 |...

Tabelle "werdegang", z.B. Daten zu schulischen Laufbahnen, etc.
id|abschluss|...
--+--------+---
38|Abitur |...


So, jetzt sucht jemand nach Personen, die Abitur haben. Also muß ich alle passenden Datensätze aus "person" suchen. In "person" steht im Feld "werde_id" die ID zu dem Werdegang der Person. Dort in "werdegang" steht dann im Feld "abschluss" der Text, nachdem gesucht wird.
Jetzt müssen beide Tabellen bei der Suche verknüpft werden.

Ich habe vorher schon eine Suche gehabt, da gab es die Tabelle werdegang noch nicht, die sah dann so aus:
(wobei die Variable auch $abschl_suche in Kleinbuchstaben umgewandelt wurde...)
PHP-Code:
SELECT person.id FROM person WHERE LOWER(person.schuleLIKE '%$abschl_suche%' 
Jetzt versuche ich das umzubiegen, bekomme aber keine gültige Syntax hin. Prinzipiell muß die Abfrage ja irgendwie so aufgebaut werden:
PHP-Code:
SELECT person.id FROM person WHERE 
LOWER
(werdegang.abschluss FROM werdegang WHERE werdegang.id=person.werde_idLIKE '%$abschl_suche%' 
Also das was jetzt in LOWER() steht ist natürlich syntaktischer Quatsch, aber das ist in etwa das was die Abfrage ja machen muß, ich suche nun die korrekte SQL-Syntax dazu.

Ich hoffe ich konnte das richtig erklären und ihr könnt mir schnell dazu helfen, vielen Dank im Vorraus.

Gruß
Martin
__________________
Caesar: veni, vidi, vici /Er kam, sah und siegte
Skyman: Er kam, sah auch und zersägte seinen Computer
Mit Zitat antworten
  #2  
Alt 18.05.2006, 13:52:45
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
AW: Abfrage aus zwei Tabellen

Hi,

such mal im Forum oder im (My-)SQL Handbuch nach JOIN bzw. INNER JOIN.
Dies ist der Befehl, den Du benötigst, um Dein Problem zu lösen.

Wenn es dann immer noch nicht klappt schreib noch mal den Befehl, den Du versucht hast sowie eventuelle Fehlermeldungen.

HTH,

Andy

(Es wär' für Dich zwar einfacher, wenn ich Dir die Lösung sagen würde, dabei lernst Du aber nicht so viel, wie wenn Du es selber schaffst ;-) )
Mit Zitat antworten
  #3  
Alt 19.05.2006, 12:32:16
Skyman Skyman ist offline
Anfänger
 
Registriert seit: Jul 2003
Ort: NRW
Beiträge: 76
AW: Abfrage aus zwei Tabellen

Hallo Andy,

danke schonmal für deinen Hinweis. Also habe ich schonmal gelernt, das für dieses Problem der JOIN Befehl zuständig ist. :o)

Also in mysql.de nachgesehen, JOIN Befehl aufgerufen, Seite angeguckt -> Nix kapiert. :-(
Es wäre ja schön gewesen erklärt zu bekommen, was ist der JOIN Befehl, was macht er und was soll z.B. LEFT JOIN überhaupt heißen??? ...links mitmachen?
Wer soll was wo mitmachen und warum links, warum nicht rechts oder oben oder unten?
Da die Erklärung also sehr dürftig ist hab ich mir die Beispiele angesehen, hmh, schön, Problemstellung verstanden und Befahlssyntax gesehen.
Ganz wie du gesagt hast, ich kannte die Lösung für das Beispielproblem, hab aber nix kapiert.
Schön wäre, wenn es wie hier im SelfPHP erklärt wäre, was macht der Befehl, wie soll man ihn als Mensch überhaupt lesen????
LEFT JOIN und dann ON, ja sicher On, OFF hört sich ja auch schon doof an... :-)

...mittlerweile weiß ich ja schon, das dieses "ON" für "...wenn es übereinstimmt..." stehen soll, na prima, konnte man da kein passenders Wort finden.
-> Trotzdem komm ich mit dieser Befehlsstruktur nicht wirklich zurecht derzeit.

Problem ist, ich hänge auch etwas unter Druck und hab den Kopf einfach nicht frei mir jetzt etwas beizubringen. Habe derzeit das Problem schon anderweitig gelöst, vielleicht nicht so schön wie mit diesem komplexen Suchbefehl, aber effizient genug.

Es würde mich aber dennoch brennend interessieren, wie der Befehl zu meinem obigen Problem lauten würde, vielleicht kann ich ja besser aus dem richtigen Befehl Rückschlüsse darauf ziehen, wie er funktioniert.
Komme ich dann nicht klar kann ich weiterfragen... :o)

Also, wenn du möchtest kannst du den Befehl gerne mal posten, bin mal gespannt wie der sich als Mensch lesen läßt...

Gruß
Martin
__________________
Caesar: veni, vidi, vici /Er kam, sah und siegte
Skyman: Er kam, sah auch und zersägte seinen Computer
Mit Zitat antworten
  #4  
Alt 19.05.2006, 14:41:01
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
AW: Abfrage aus zwei Tabellen

Hi Martin,

also fang' ich mal von vorne an:

JOIN bzw. INNER JOIN bedeutet, daß zwei Tabellen miteinander verbunden werden, die in der mit ON verknüpften Spalte jeweils identische Werte stehen haben.
LEFT JOIN (manchmal auch LEFT OUTER JOIN) bedeutet, daß man bei zwei verknüpften Tabellen sämtliche Werte aud der linken Tabelle bekommt und nur die Werte aus der rechten Tabelle, bei der die mit ON verknüpften Spalten identische Werte enthalten.
RIGHT JOIN (auch RIGHT OUTER JOIN) ist dementsprechend genau andersrum: Alles von rechts, und von links nur was passt.
Fehlende Einträge in der "leeren" Tabelle werden als NULL ausgegeben, damit die Anzahl der Zeilen stimmt.
Welche Tabelle hierbei "links" bzw. "rechts" steht ergibt sich daraus, welche vor bzw. nach dem JOIN Befehl steht.

Das Wörtchen "ON" ist ziemlich wichtig, da hiermit der Datenbank (SQL gibt's ja nicht nur bei MySQL) gesagt wird, wie die verknüpften Tabellen zusammenhängen sollen. Das oft gesehene FROM tabelle1, tabelle2 WHERE tabelle1.id = tabelle2.id geht zwar auch, ist aber performancetechnisch nicht so toll und kann Dir die Datenbank bei sehr großen Abfragen ziemlich schnell runter reissen.

Zu Deinem Problem (Erklärung nach den # bitte vor ausprobieren löschen):
Code:
SELECT p.* # alles aus "person"
     , w.* # alles aus "werdegang"
  FROM person AS p INNER JOIN werdegang AS w # Aliase p und w zwecks Faulheit
       ON p.werde_id = w.id # Die "person" hat immer mindestens einen Eintrag in "werdegang"
 WHERE LOWER(w.abschluss) LIKE '%abschl_suche%' # Einschränkung der Treffer wie benötigt
Als Performance-Tip noch folgendes: Felder, die in einer WHERE- Klausel verwendet werden sowie in jedem Fall Felder, über die zwei Tabellen miteinander verknüpft werden ("ON") sollten einen INDEX haben.

HTH,

Andy
Mit Zitat antworten
  #5  
Alt 23.05.2006, 12:07:31
Skyman Skyman ist offline
Anfänger
 
Registriert seit: Jul 2003
Ort: NRW
Beiträge: 76
AW: Abfrage aus zwei Tabellen

Hallo Andy,

bin erst heute wieder dazu gekommen mich dem Problem zu widmen.

Ich danke dir schonmal recht herzlich, diese Erklärung für "doofe" :o) ist doch das, was mir gefehlt hat, zumindest hast du es so erklärt, das ich den JOIN Befehl nun etwas verstanden habe.

Somit kann ich auch die Notation lesen, die du mir geschickt hast.
Ich habe Sie jetzt noch nicht ausprobiert, aber das sieht echt gut aus, muß ja dann erstmal bei mir einbauen...

Muß aber auch testen, was du mit deiner Bemerkung in der ON Bedingung meinst. Was passiert, wenn kein "werdegang" vorhanden ist? Dann ist "werde_id" = 0 ...

Aber trotzdem schonmal vielen Dank, du bist ein guter Lehrer... :o)

Gruß,
Skyman
__________________
Caesar: veni, vidi, vici /Er kam, sah und siegte
Skyman: Er kam, sah auch und zersägte seinen Computer
Mit Zitat antworten
  #6  
Alt 23.05.2006, 18:39:53
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
AW: Abfrage aus zwei Tabellen

Hi Martin,

meine Bemerkung in der "ON" Bedingung bedeutet nur, daß Du nur dann Treffer findest, wenn sowohl in der linken (= "person") als auch in der rechten (= "werdegang") Tabelle in den verknüpften Spalten der selbe Wert steht.
Wenn es sein kann, daß es von einer Person keinen Werdegang gibt (werde_id = 0), Du diese aber dennoch ausgeben willst, musst Du einen LEFT JOIN verwenden.
Ansonsten wirst Du diese Person mit einem INNER JOIN nicht angezeigt bekommen.

Teste einfach mal beide Varianten mit Datensätzen, die sowohl einen Eintrag in "personen" als auch in "werdegang" haben UND dann mal mit Personen, wo es keinen passenden Wert in "werdegang" gibt. Dann verstehst Du am Besten, was ich meine ;-)

HTH,

Andy
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage mit 2 Tabellen Aline MySQLi/PDO/(MySQL) 1 04.03.2006 13:38:44
Abfrage aus mehreren Tabellen Zudecke PHP für Fortgeschrittene und Experten 19 30.08.2005 22:57:42
Abfrage über zwei Tabellen MrLongbaugh MySQLi/PDO/(MySQL) 6 30.08.2005 18:14:56
eine abfrage für zwei tabellen hoschy PHP Grundlagen 3 16.12.2004 21:47:07
Select Abfrage für 2 Tabellen muc PHP für Fortgeschrittene und Experten 2 16.08.2003 14:33:25


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:46:07 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt