Problem mit mySQL Abfrage
Schnaps
- php
Hallo ich habe hier eine mySQL Abfrage die nicht ganz das als Ergebnis bringt was ich mir vorstelle.
Ich habe auf folgender Seite eine Tabellen Übersicht gemacht über die Tabellen über die es geht.
http://www.fkk-clan.com/frage.htm
Hier nun der SQL String:
SELECT distinct programm.datum, film_details.aktiv FROM programm, film_details WHERE ((programm.datum>=1095170400 && programm.datum <=1095206399) && film_details.aktiv=1) ORDER BY programm.datum
Dieser string filter mir halt alle Werte für 'datum' aus der Tabelle programm zwischen den beiden Grenzen. Und das nicht redundant wegen distingt.
Nun möchte ich mit dem String aber auch noch erreichen das er mir nur die werte von 'datum'zurück gibt die in der Tabelle 'film_details' bei aktiv eine 1 stehen haben.
Das macht er aber so nicht, es werden zwar die Werte für 'datum' richtig angezeigt, aber halt auch die, die nicht aktiv gleich 1 haben.
Wo liegt denn der Fehler?
yo,
Wo liegt denn der Fehler?
das erste was mir auffällt ist die join bedindung die fehlt. dann kannst du dir eventuell auch das distinct sparen und es wird auch wesentlich schneller ausgeführt werden. ansonsten führt er das sogennante karthesische produkt aus über beide tabellen aus. ausserdem sind da ein wenig viel und eventuelle auch unnötige klammern dabei. warum er datensätze aus film_details nimmt, die keinen aktiv wert von 1 haben, kann ich im moment so auch nicht sehen. kannst du mal ein mal eine ergebnisliste anzeigen ?
Ilja
kannst du mal ein mal eine ergebnisliste anzeigen ?
Erstellt von: phpMyAdmin 2.5.5-pl1
SQL-Befehl: SELECT DISTINCT programm.datum, film_details.aktiv FROM programm, film_details WHERE ( ( programm.datum >=1095012000 && programm.datum <=1095033599 ) && film_details.aktiv =1 ) ORDER BY programm.datum LIMIT 0, 30;
Zeilen: 4
datum aktiv
1095012000 1
1095012900 1
1095013800 1
1095020100 1
Ich habe den String nun soweit hin bekommen das er mir die nicht aktiven nicht mehr liefert.
Allerdings sind die Ergebnbisse teilweise redundant?
Wie kann das denn trotz distinct?
HIer der String:
SELECT distinct programm.datum, film_details.aktiv, film_details.id FROM programm, film_details WHERE programm.datum>=1095012000 && programm.datum <=1095033599 && programm.film_id =film_details.id && film_details.aktiv=1 ORDER BY programm.datum
HIer das entsprechende Ergebniss:
Erstellungszeit: 11. September 2004 um 15:13
Erstellt von: phpMyAdmin 2.5.5-pl1
SQL-Befehl: SELECT DISTINCT programm.datum, film_details.aktiv, film_details.id FROM programm, film_details WHERE programm.datum >=1095012000 && programm.datum <=1095033599 && programm.film_id = film_details.id && film_details.aktiv =1 ORDER BY programm.datum LIMIT 0, 30;
Zeilen: 4
datum aktiv id
1095012000 1 1
1095012000 1 17
1095012900 1 14
1095020100 1 1
yo,
Ich habe den String nun soweit hin bekommen das er mir die nicht aktiven nicht mehr liefert.
das sollte schon bei der ersten abfrage der fall gewesen sein, die du hier gepostest hast. alles andere hätte mich auch verwundert.
Wie kann das denn trotz distinct?
distinct schließt nur datensätze der ergebnismenge aus, wenn alle spalten, die angezeigt werden sollen auch haargenau gleich sind. also wenn sie nur in einer spalte unterschiedlich sind, dann werden sie nicht als gleich durch distinct angesehen. und genau das kann man dann auch beid er ergebnisliste beobachten, dass sich alle angezeigten datensätze in mindestens einer spalte unterschieden.
wie gesagt, distinct eventuell weglassen und die join bedingung einsetzen, ist wesentlich besser.
Ilja