PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   SQL / Datenbanken (https://www.php-resource.de/forum/sql-datenbanken/)
-   -   Fehlende Einträge (hier: Personen) finden (https://www.php-resource.de/forum/sql-datenbanken/99553-fehlende-eintraege-hier-personen-finden.html)

smyl 21-05-2010 11:32

Fehlende Einträge (hier: Personen) finden
 
Hallo,

ich würde mich über eine kurze Hilfe freuen. Zur Illustration meines Problem das folgende Beispiel:

Es gibt folgende Tabellen:
Personen (id / name)
Eventteilnehmer (id / personen_id)

Ausgangssituation
: In der Tabelle Eventteilnehmer befindet sich ein Teil der Personen (verknüpft über personen_id).

Problem (Ziel): Ich möche jetzt herausfinden welche Personen noch nicht als Eventteilnehmer feststehen. Also sich noch nicht in Eventteilnehmer befinden

Zusatz: Mir ist bewusst, dass das Ganze über eine Schleife problemlos lösbar ist. Allerdings suche ich ein Weg, der etwas schneller und Performance-freundlicher ist. Abfrage findet recht häufig statt und sollte schnell zum Ergebnis kommen (Beispiel war zur einfachen Illustration - geht um einen Vokabeltrainer).

Gibt es z.B. eine MySQL Abfrage, welche die Ergebnisse liefert?

Vielen Dank

onemorenerd 21-05-2010 11:39

Informiere dich mal über JOINs.

smyl 21-05-2010 12:12

Danke, denke konzeptionell habe ich es. Mal sehen, ob auch die Integration zum gewünschen Ergebnis führt.



Klar: Gibt einen Grund, weshalb das Thema "JOINS" fixiert ist. Also eine kleine Entschuldigung dafür, dass ich dem Artikel nicht die nötige Aufmerksamkeit geschenkt habe. Quadrate und Wurzeln sind etwas abgeschreckend ;-)

Im Laufe der Nutzung hat sich bei mir ein Folgeproblem ergeben für das ich bisher keine Lösung gefunden habe.

Ursprungsproblem:

Es gibt folgende Tabellen:
Personen (personen_id / name)
Eventteilnehmer (id / personen_id)

Ausgangssituation
: In der Tabelle Eventteilnehmer befindet sich ein Teil der Personen (verknüpft über personen_id).

Problem (Ziel): Ich möche jetzt herausfinden welche Personen noch nicht als Eventteilnehmer feststehen. Also sich noch nicht in Eventteilnehmer befinden

Lösung

PHP-Code:

SELECT Personen.name
FROM Personen
LEFT JOIN Eventteilnehmer USING 
(personen_id)
WHERE  Eventteilnehmer.personen_id IS NULL 

Folgeproblem:

Beide meine Tabellen haben jetzt zusätzliche Attribute. Eventteilnehmer können männlich oder weiblich sein. In der Tabelle Eventteilnehmer werden außerdem Eventteilnehmer für verschiedene Events aufgeführt.

Es gibt also folgende Tabellen:
Personen (personen_id / name / geschlecht [1/2])
Eventteilnehmer (id / personen_id / event_id)
Problem (Ziel): Ich möche jetzt herausfinden welche Männer (geschlecht=1) noch nicht als Eventteilnehmer bei einem bestimmten Event feststehen.

Folgende Abfrage führt leider nicht zum Ziel

PHP-Code:

SELECT Personen.name
FROM Personen
LEFT JOIN Eventteilnehmer USING 
(personen_id)
WHERE  Eventteilnehmer.personen_id IS NULL
AND Eventteilnehmer.event_id='1'
AND Personen.geschlecht='1' 

Mir ist bewusst, dass das Problem bei Eventteilnehmer.event_id='1' liegt, aber welchen Lösungsweg gibt es?



Ok, habe (glaube ich) die Lösung .

Einfach nach dem Stil:

PHP-Code:

LEFT JOIN table_name2
ON table_name1
.column_name=table_name2.column_name AND .... 

So passt das.


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:35 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG