Schnaps: Problem mit mySQL Abfrage

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?

  1. 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

    1. 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

      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

        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