Stefan: Probleme mit Datenbankfilterung...

Hallo,

da mein erster Thread zu diesem Thema für eine Menge Verwirrung gesorgt hat und mir von daher keiner wirklich helfen konnte, wollte ich das Thema noch mal von vorne aufrollen.

Also ich habe eine Tabelle "playlists". In dieser Tabelle sind folgende Spalten und dazugehörige Werte:

id, userid, playlist, Titel, Kategorie, pkey(Playlistkey),dkey(Dateikey)
---------------------------------------------------------------------
3  85  playlist1  Titel1  1  wtaRVr2BIUuDl363Wl  SsOqQ0NiRfxLf1SK5Y
4  85  playlist2  Titel1  1  Bd7sheIS7dbwbc7eYt  SsOqQ0NiRfxLf1SK5Y
6  85  playlist1  Titel2  2  wtaRVr2BIUuDl363Wl  MDH6FTASNDURsEC

Wenn ich nun die Datei Titel2 (Dateikey: MDH6FTASNDURsEC) aufrufe soll die SQL Datenbank alle anderen Playlisten des Benutzers ausgeben außer die, wo der Titel den ich aufrufe schon gespeichert ist. Wenn ich das jetzt aber ganz normal mit SELECT usw. mache dann sendet er mir trotzdem beide Playlisten.

Ich hoffe ich habe mich dieses mal verständlicher ausgedrückt und ich würde mich echt freuen, wenn mir jemand bei meinem Problem helfen könnte. Ich sitze da jetzt schon 2 Tage lang dran :(

  1. Hi,

    Ich hoffe ich habe mich dieses mal verständlicher ausgedrückt und ich würde mich echt freuen, wenn mir jemand bei meinem Problem helfen könnte. Ich sitze da jetzt schon 2 Tage lang dran :(

    wenn Du nach zwei Tagen noch kein MINUS gefunden hast, muss ich davon ausgehen, dass Dein DBMS dies nicht beherrscht. Da es damit sehr fraglich ist, was es _überhaupt_ kann, solltest Du unbedingt dazu sagen, welches DBMS Du verwendest, denn sonst wird Dir kaum jemand helfen können.

    Aus dieser Erfahrung heraus merke Dir bitte, dass bei *jeder* Datenbank-bezüglichen Frage die Nennung des verwendeten DBMS (in Name _und_ Version) unumgänglich ist.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      ich schreibe einfach mal ein paar Daten die ich herausfinden konnte.

      phpMyAdmin - 2.9.1.1-Debian-3
      Server Version: 5.0.32-Debian_7etch1-log
      Protokoll-Version: 10
      MySQL-Zeichensatz:  UTF-8 Unicode (utf8)
      MySQL-Client-Version: 5.0.32
      Verwandte php-Erweiterungen: mysql

      Ich hoffe euch bringen diese Angaben weiter um mir bei meinem Problem zu helfen. Danke!

      1. Hi,

        ich schreibe einfach mal ein paar Daten die ich herausfinden konnte.

        danke. Die von mir gemeinte Information ist diese:

        Server Version: 5.0.32-Debian_7etch1-log
        MySQL-Zeichensatz:  UTF-8 Unicode (utf8)

        Genauer gesagt die Kombination aus "MySQL" und der Versionsnummer darüber. Bitte gib dies bei jedem Datenbank-Problem mit an. Der Rest ist i.d.R. nicht wichtig.

        Weiteres siehe im Teilhread von Thilo.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Server Version: 5.0.32-Debian_7etch1-log
          MySQL-Zeichensatz:  UTF-8 Unicode (utf8)

          Da ist aber auf jeden Fall ein MINUS möglich!

          1. Hi,

            Server Version: 5.0.32-Debian_7etch1-log
            MySQL-Zeichensatz:  UTF-8 Unicode (utf8)

            Da ist aber auf jeden Fall ein MINUS möglich!

            mir liegt zwar gerade nur 5.0.27 vor, aber dort meldet ein "SELECT 42 MINUS SELECT 21" einen Fehler. Es liegt nicht daran, dass 21 nur die halbe Wahrheit ist; mit anderen Werten ist das Verhalten identisch. Auch die MySQL-Doku liefert mir keine Hinweise darauf, dass MINUS unterstützt würde. Man reiche mir mein Großschwert des erbarmungslosen Gladiators.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. mir liegt zwar gerade nur 5.0.27 vor, aber dort meldet ein "SELECT 42 MINUS SELECT 21" einen Fehler. Es liegt nicht daran, dass 21 nur die halbe Wahrheit ist; mit anderen Werten ist das Verhalten identisch. Auch die MySQL-Doku liefert mir keine Hinweise darauf, dass MINUS unterstützt

              Du hast natürlich recht, meine Antwort war reine ( fehlgeleitete) Überzeugung ^^

              1. Hi,

                Du hast natürlich recht, meine Antwort war reine ( fehlgeleitete) Überzeugung ^^

                die ich bis vorhin noch teilte ... :-)

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
    2. Hey Cheatah,

      Aus dieser Erfahrung heraus merke Dir bitte, dass bei *jeder* Datenbank-bezüglichen Frage die Nennung des verwendeten DBMS (in Name _und_ Version) unumgänglich ist.

      Cheatah

      man kann sich zumindest darauf den SQL-86 Standard einigen. Den sollten die gängigen DBMS gleichermaßen verstehen.
      Entsprechend finde ich die Informationen eigentlich nicht sooo wichtig. Gerade im konkreten Beispiel ...

      Beste Grüße
        ~ Thilo

      1. Hi,

        man kann sich zumindest darauf den SQL-86 Standard einigen. Den sollten die gängigen DBMS gleichermaßen verstehen.

        ja, und wenn ich mich nicht irre, enthält SQL-86 bereits MINUS. Insofern muss es sich bei dem DBMS um einen extremen Exoten handeln, der nicht mal das Minimum des Nötigen unterstützt.

        Entsprechend finde ich die Informationen eigentlich nicht sooo wichtig. Gerade im konkreten Beispiel ...

        Meiner Ansicht nach ist es damit umso wichtiger ...

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. ja, und wenn ich mich nicht irre, enthält SQL-86 bereits MINUS. Insofern muss es sich bei dem DBMS um einen extremen Exoten handeln, der nicht mal das Minimum des Nötigen unterstützt.

          Kein MINUS? ^^
          Also ich hab eure Diskussion bisher leider nicht mitverfolgt, aber das war bestimmt lustig XD

          ~ Thilo

  2. Hallo,

    Hey!

    da mein erster Thread zu diesem Thema für eine Menge Verwirrung gesorgt hat und mir von daher keiner wirklich helfen konnte, wollte ich das Thema noch mal von vorne aufrollen.

    Ich wette jetzt gibt Dir gleich irgendwer fürs Doppelpost eins auf die Mütze ^^

    id, userid, playlist, Titel, Kategorie, pkey(Playlistkey),dkey(Dateikey)

    3  85  playlist1  Titel1  1  wtaRVr2BIUuDl363Wl  SsOqQ0NiRfxLf1SK5Y
    4  85  playlist2  Titel1  1  Bd7sheIS7dbwbc7eYt  SsOqQ0NiRfxLf1SK5Y
    6  85  playlist1  Titel2  2  wtaRVr2BIUuDl363Wl  MDH6FTASNDURsEC

    Wenn ich nun die Datei Titel2 (Dateikey: MDH6FTASNDURsEC) aufrufe soll die SQL Datenbank alle anderen Playlisten des Benutzers ausgeben außer die, wo der Titel den ich aufrufe schon gespeichert ist. Wenn ich das jetzt aber ganz normal mit SELECT usw. mache dann sendet er mir trotzdem beide Playlisten.

      
    SELECT p2.playlist  
    FROM playlists p1, playlists p2  
    WHERE p1.dkey = 'MDH6FTASNDURsEC'  
    AND p1.Titel = p2.Titel  
    AND p1.playlist <> p2.playlist  
    
    

    Ich hab das jetzt nicht getestet, aber es sollte so funktionieren, wie Du beschrieben hast : )
    Der dkey sollte eindeutig sein und sollte nicht mehrfach vorkommen!

    Beste Grüße
      ~ Thilo

    1. Hallo, danke erstmal für deine Hilfe...
      wenn ich es so mache:

      SELECT p2.playlist
      FROM playlists p1, playlists p2
      WHERE p1.dkey = 'MDH6FTASNDURsEC'
      AND p1.Titel = p2.Titel
      AND p1.playlist <> p2.playlist

        
      erhalte ich genau das Gegenteil von dem was ich wollte, das heißt jetzt werden alle Playlisten angezeigt wo dieser Titel schon vorhanden ist. Aber das ist schonmal 1000 mal mehr als ich geschafft habe. Wenn du mir das jetzt noch umdrehen könntest bin ich glücklich.  
        
      Vielen Dank schonmal im vorraus!
      
      1. SELECT p2.playlist
        FROM playlists p1, playlists p2
        WHERE p1.dkey = 'MDH6FTASNDURsEC'
        AND p1.Titel = p2.Titel
        AND p1.playlist <> p2.playlist

        
        >   
        > erhalte ich genau das Gegenteil von dem was ich wollte, das heißt jetzt werden alle Playlisten angezeigt wo dieser Titel schon vorhanden ist. Aber das ist schonmal 1000 mal mehr als ich geschafft habe. Wenn du mir das jetzt noch umdrehen könntest bin ich glücklich.  
        >   
        > Vielen Dank schonmal im vorraus!  
          
        Achje! Cheatah hatt das Stichwort schon gegeben! MINUS dreht das Ergebnis um...  
          
        ~~~sql
          
        ( SELECT DISCTINCT playlist FROM playlists )  
        MINUS  
        ( SELECT p2.playlist  
        FROM playlists p1, playlists p2  
        WHERE p1.dkey = 'MDH6FTASNDURsEC'  
        AND p1.Titel = p2.Titel )  
        
        

        Einer Tabelle mit allen playlist-Namen wird eine Tabelle abgezogen, die die Playlists enthält, die Du suchst.
        Ich hab die Bedingung rausgenommen, dass die Playlisten verschieden sein sollen in der zweiten Abfrage ( ist die von vorhin).

        ~ Thilo

        1. Hi,

          Achje! Cheatah hatt das Stichwort schon gegeben! MINUS dreht das Ergebnis um...

          im Posting weiter unten wollte ich einen Link zu MINUS in der MySQL-Doku hinterlegen, und was stelle ich fest? Es gibt dort nichts dazu. Grund: MySQL 5 kann kein MINUS ... argl! Ich konnte dies auch erfolgreich (lies: erfolglos) testen; ein MINUS-Statement liefert bei MySQL einen Fehler.

          Somit schlage ich ein "WHERE ... NOT IN (Subselect)" sowie eine kollektive Schlachtung aller an MySQL Schuldigen vor. Anschließend verfahren wir mit den Herstellern von PHP analog vor, nur aus Prinzip.

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Ohje jetzt seh ich schon wieder nicht durch... jemadn schreibt was mit MINUS, jemand anders sagt mit MINUS geht es nicht... wie ist es denn nun richtig? Also das funktioniert leider nicht...

            ( SELECT DISCTINCT playlist FROM playlists )
            MINUS
            ( SELECT p2.playlist
            FROM playlists p1, playlists p2
            WHERE p1.dkey = 'MDH6FTASNDURsEC'
            AND p1.Titel = p2.Titel )

            Hierbei ensteht folgender Fehler:

            MySQL meldet: Dokumentation
            #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MINUS  ( SELECT p2 . playlist  FROM playlists p1 , playlists p2  WHERE p1 . dkey' at line 1

            Könnte mir jemand nochmal komplett so schicken wie es sein muss... ich werde immer verwirrter. Vielen Dank an denjenigen und auch alle anderen die helfen, ich weiß das sehr zu schätzen!

            1. Hi,

              Ohje jetzt seh ich schon wieder nicht durch... jemadn schreibt was mit MINUS, jemand anders sagt mit MINUS geht es nicht... wie ist es denn nun richtig? Also das funktioniert leider nicht...

              ich schrieb was mit MINUS und stellte später fest, dass MySQL zu doof dazu ist. Daraufhin schrieb ich was von "NOT IN (Subselect)".

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
              1. Hallo,

                es tut mir leid, wenn ich euch so mit meinen fragen Quäle aber wenn man 2 Tage an einer MySQL abfrage sitzt wird das langsam ein bisschen nervig (ist denk ich verständlich). Also ich habe jetzt folgende Abfrage benutzt:

                SELECT DISTINCT playlist FROM playlists WHERE
                playlist <> ANY ( SELECT playlist FROM playlists WHERE dkey ='MDH6FTASNDURsEC')

                Das funktiuniert auch alles soweit wunderbar ABER wenn jetzt folgende Datensätze in der Datenbank auftauchen steh ich wieder vor dem Problem wie am Anfang, das er mir alle Playlisten ausgibt, auch die wo der Titel schon gespeichert ist:

                id,userid,playlist,Titel,Kategorie,pkey(Playlistkey),dkey(Dateikey)
                ---------------------------------------------------------------------
                1  85  abc123  2  wtaRVr2BIUuDl363Wl  Jm8iSa0AzfmbLgQan
                2  85  67657   1  1w4c8mstwUHU9Q1naF  lixlNlQfLAiANbEQ3
                3  85  abc123  1  wtaRVr2BIUuDl363Wl  MDH6FTASNDURsEC
                4  85  546465  1  LT05EcUB3VaH6JM4KR  MDH6FTASNDURsEC
                6  85  abc123  2  wtaRVr2BIUuDl363Wl  SsOqQ0NiRfxLf1SK5Y
                7  85  abc123  2  wtaRVr2BIUuDl363Wl  mJm8iSa0AzfmbLgQan

                Weiß jemand woran das liegt?

                1. Das funktiuniert auch alles soweit wunderbar ABER wenn jetzt folgende Datensätze in der Datenbank auftauchen steh ich wieder vor dem Problem wie am Anfang, das er mir alle Playlisten ausgibt, auch die wo der Titel schon gespeichert ist:

                  Ja Stefan, wenn ich mir Deine Tabelle so anschaue, ist das kaum verwunderlich. Ich habe es schon vorhin erwähnt. Die Abfrage stimmt nur, wenn dkey ein Schlüssel ist.

                  Das heißt, dkey ist für jeden Titel eindeutig.
                  Wenn Du für jeden Titel einen anderen dkey hast, dann ist das alles hinfällig. Der Name dkey ist damit übrigens irreführend und wahrscheinlich für Deine Anwendung in letzter Instanz überflüssig. Das aber nur als kleiner Tipp anbei.

                  id,userid,playlist,Titel,Kategorie,pkey(Playlistkey),dkey(Dateikey)

                  1  85  abc123  2  wtaRVr2BIUuDl363Wl  Jm8iSa0AzfmbLgQan
                  2  85  67657   1  1w4c8mstwUHU9Q1naF  lixlNlQfLAiANbEQ3
                  3  85  abc123  1  wtaRVr2BIUuDl363Wl  MDH6FTASNDURsEC
                  4  85  546465  1  LT05EcUB3VaH6JM4KR  MDH6FTASNDURsEC
                  6  85  abc123  2  wtaRVr2BIUuDl363Wl  SsOqQ0NiRfxLf1SK5Y
                  7  85  abc123  2  wtaRVr2BIUuDl363Wl  mJm8iSa0AzfmbLgQan

                    
                  SELECT DISTINCT playlist FROM playlists WHERE  
                  playlist <> ANY ( SELECT DISTINCT p2.playlist FROM playlists p1, playlists p2 WHERE p1.dkey ='MDH6FTASNDURsEC' AND p1.titel = p2.titel)  
                  
                  

                  Müsste jetzt aber zu Deinem Ergebnis führen. Deine "keys" solltest Du nocheinmal überdenken. Du musst Dich bei der obigen Abfrage darauf verlassen können, dass die Titel alle die gleiche Schreibweise haben.

                  Beste Grüße
                    ~ Thilo

                  1. Hi,

                    SELECT DISTINCT playlist FROM playlists WHERE
                    playlist <> ANY ( SELECT DISTINCT p2.playlist FROM playlists p1, playlists p2 WHERE p1.dkey ='MDH6FTASNDURsEC' AND p1.titel = p2.titel)

                      
                    mit diesem Self-Join bekommst Du aus dem Subselect die Werte "546465" und "abc123". Ohne ihn bekommst Du "abc123" und "546465". Was genau ist da jetzt gewonnen? :-)  
                      
                    Cheatah  
                    
                    -- 
                    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
                    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
                    X-Will-Answer-Email: No  
                    X-Please-Search-Archive-First: Absolutely Yes
                    
                    1. Hi,

                      SELECT DISTINCT playlist FROM playlists WHERE
                      playlist <> ANY ( SELECT DISTINCT p2.playlist FROM playlists p1, playlists p2 WHERE p1.dkey ='MDH6FTASNDURsEC' AND p1.titel = p2.titel)

                      
                      >   
                      > mit diesem Self-Join bekommst Du aus dem Subselect die Werte "546465" und "abc123". Ohne ihn bekommst Du "abc123" und "546465". Was genau ist da jetzt gewonnen? :-)  
                        
                      Kann ich Dir sagen. Da dkay, nicht eindeutig ist, sammle ich so alle anderen Playlists, die auch den gleichen Titel Tragen aber einen ANDEREN dkey haben.  
                        
                      Wenn ich die Bedingung "AND p1.titel = p2.titel" weglasse, dann enthält der Subquery nur alle Titel, die auf den vermeintlichen dkey passen. Da aber noch andere Playlists mit gleichem Titel, aber anderem dkey existieren, tauchen die Titel im Gesamtergebnis wieder auf.  
                        
                        ~ Thilo
                      
                  2. Hallo Thilo,

                    SELECT DISTINCT playlist FROM playlists WHERE
                    playlist <> ANY ( SELECT DISTINCT p2.playlist FROM playlists p1, playlists p2 WHERE p1.dkey ='MDH6FTASNDURsEC' AND p1.titel = p2.titel)

                      
                      
                    Mit dieser Abfrage gibt mir MySQL nun folgendes zurück:  
                    |playlist|  
                    |--------|  
                    |abc123  |  
                    |67657   |  
                    |546465  |  
                    |--------|  
                      
                      
                    Das heißt aber leider immernoch, das er 2 Playlisten zuviel ausgibt... eigentlich dürfte er ja nur 67657 ausgeben.
                    
                    1. Mit dieser Abfrage gibt mir MySQL nun folgendes zurück:

                      playlist
                      abc123
                      67657
                      546465
                      --------

                      Das heißt aber leider immernoch, das er 2 Playlisten zuviel ausgibt... eigentlich dürfte er ja nur 67657 ausgeben.

                      Hm, nein nichteinmal 67657 dürfte dabei sein! Nach Deiner Tabelle oben enthält auch die Titel 1!
                      Ich schau nochmal...

                      1. OK vielen vielen Dank für deine Bemühungen, schreib einfach wenn du eine Idee hast :)

                        1. OK vielen vielen Dank für deine Bemühungen, schreib einfach wenn du eine Idee hast :)

                            
                          SELECT playlist FROM playlist WHERE playlist NOT IN (  
                          SELECT DISTINCT p2.playlist FROM playlist p1, playlist p2 WHERE p1.dkey ='MDH6FTASNDURsEC' AND p1.titel = p2.titel )  
                          
                          

                          Liefert in meiner Test-DB jetzt das richtige Ergebnis, nämlich keine Treffer. Alle drei Playlisten enthalten Titel 1, deshalb darf keine der insgesamt drei vertretenen angezeigt werden.

                          Das ... WHERE ... <> ANY ( ... )
                          und das ... WHERE ... NOT IN ( ... )
                          liefern verschiedene Ergebnisse. Scheinbar sind diese Schreibweisen doch nicht äquivalent!
                          Sehr sehr interessant! Ich frag mich jetzt nur wieso ...

                          ~ Thilo

                          1. SELECT playlist FROM playlist WHERE playlist NOT IN (
                            SELECT DISTINCT p2.playlist FROM playlist p1, playlist p2 WHERE p1.dkey ='MDH6FTASNDURsEC' AND p1.titel = p2.titel )

                              
                            Wenn ich noch DISTINCT beim ersten SELECT hinschreibe dann funktioniert alles wie gewünscht. Vielen Vielen Dank! Du hast mich gerettet :)  
                              
                            Eine Frage habe ich aber noch:  
                              
                            
                            > Liefert in meiner Test-DB jetzt das richtige Ergebnis, nämlich keine Treffer. Alle drei Playlisten enthalten Titel 1, deshalb darf keine der insgesamt drei vertretenen angezeigt werden.  
                              
                            Wie lokalisierst du den Titel 1? anhand des dkey? Weil wäre es nicht besser anhand des dkey zu filtern. Der ist doch immer der selbe wogegen der Titel variieren kann. Oder habe ich da gerade ein Brett vorm Kopf?
                            
                            1. SELECT playlist FROM playlist WHERE playlist NOT IN (
                              SELECT DISTINCT p2.playlist FROM playlist p1, playlist p2 WHERE p1.dkey ='MDH6FTASNDURsEC' AND p1.titel = p2.titel )

                              
                              >   
                              > Wenn ich noch DISTINCT beim ersten SELECT hinschreibe dann funktioniert alles wie gewünscht. Vielen Vielen Dank! Du hast mich gerettet :)  
                              
                              ^^ ja stimmt, DISTINCT hatte ich wieder vergessen!  
                                
                              
                              > Wie lokalisierst du den Titel 1? anhand des dkey? Weil wäre es nicht besser anhand des dkey zu filtern. Der ist doch immer der selbe wogegen der Titel variieren kann. Oder habe ich da gerade ein Brett vorm Kopf?  
                                
                              Ja richtig, so mache ich das auch. Ich erklär Dir nochmal die ganze Anfrage, dann weißte, was ich mein'!  
                                
                              ~~~sql
                                
                              SELECT playlist FROM playlist  
                              
                              

                              Liefert Dir alle Listen... Du brauchst aber nicht alle, deswegen ziehst Du alle 'raus, die den Titel enthalten. So:

                                
                              SELECT playlist FROM playlist WHERE playlist NOT IN ( "ALLE PLAYLISTS, DIE DEN TITEL ENTHALTEN" )  
                              
                              

                              Also alle playlist, bis auf die, die in einer Tabelle sind, die den Titel enthalten.

                              Jetzt brauchen wir quasi "ALLE PLAYLISTS, DIE DEN TITEL ENTHALTEN".

                                
                              SELECT * FROM playlist p1, playlist p2  
                              
                              

                              Das baut eine Tabelle, die alle Datensätze miteinander verknüpft.
                              Ich will aber nur die, die den gleichen Titel haben:

                                
                              SELECT DISTINCT p2.playlist FROM playlist p1, playlist p2 WHERE p1.titel = p2.titel  
                              
                              

                              Liefert jetzt die playlisten, die den gleichen Titel enthalten.
                              Wir fragen aber nach einem dkey, der einem Titel entspricht:

                                
                              SELECT DISTINCT p2.playlist FROM playlist p1, playlist p2 WHERE p1.titel = p2.titel AND p1.dkey ='MDH6FTASNDURsEC'  
                              
                              

                              Das verknüpft uns also zwei Tabellen. Aus der ersten Tabelle nehmen wir nur die Datensätze, auf die der dkey passt. Also alle Playlisten, die den Titel enthalten ( filter nach dkey, was Du ja wolltest). Weil es aber noch andere Playlisten gibt, die den Titel auch enthalten, wird eben mit allen Datensätzen verknüpft, die auch den Titel tragen, aber einen anderen dkey haben. Dass passiert durch p1.titel = p2.titel.

                              Diese Anfrage, wird oben einfach eingesetzt und wir haben ein Schema
                                 1. ALLE PLAYLISTS
                                 2. OHNE DIE, DIE DEN GLEICHEN TITEL HABEN, WIE DIE MIT DEM DKEY XYZ

                              k, soweit?

                              ~ Thil:o)

                              1. Ja, das habe ich soweit verstanden, vielen Dank für deine Mühe... ein Problem ahbe ich jetzt noch... Ich will nur die Playlisten von dem Benutzer anzeigen welcher in $_SESSION['userid'] steht.

                                Damit nur jeder Benutzer seine Playliste sieht. Ist das da noch einbaubar?

                                1. Sorry für Doppelposting,

                                  habe es selber hinbekommen:

                                  Einach in der Hauptquery noch auf userid überprüfen. An alle die mir geholfen haben, noch mal ein dickes Dankeschön, vor allem an dich Thilo. Ohne dich hätte ich vermutlich noch 5 Tage gebraucht, wenn überhaupt ;)

                                  1. echo $begrüßung;

                                    Sorry für Doppelposting,

                                    Wenn du neue Erkenntnisse hast, kannst und solltest du die selbstverständlich durch ein neues Posting anfügen. Was hier im Allgemeinen als Doppelposting bezeichnet wird, wäre wohl eindeutiger als Doppelthread bezeichnet. Denn wenn du dein Problem in mehrere Threads aufteils wird das für die Antwortenden und Mitlesenden unübersichtlich. Das Erweitern des "eigenen" Threads auch mit Beiträgen auf ein eigenes Posting fällt nicht unter die zu Recht missbilligten Doppelposting/Doppelthreads.

                                    echo "$verabschiedung $name";

                                2. Damit nur jeder Benutzer seine Playliste sieht. Ist das da noch einbaubar?

                                    
                                  SELECT DISTINCT playlist FROM playlist WHERE playlist NOT IN ( SELECT DISTINCT p2.playlist FROM playlist p1, playlist p2 WHERE p1.dkey ='MDH6FTASNDURsEC' AND p1.titel = p2.titel ) AND userid = $_SESSION['userid']  
                                  
                                  

                                  So? ^^

                2. Hi,

                  es tut mir leid, wenn ich euch so mit meinen fragen Quäle

                  macht nichts. Wir quälen Dich ja auch mit unseren Antworten ;-)

                  wenn jetzt folgende Datensätze in der Datenbank auftauchen

                  Wenn diese Datensätze _auftauchen_ oder wenn die Tabelle nur aus diesen Datensätzen _besteht_? Im letzteren Fall funktioniert das Statement korrekt.

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
                  1. Wenn diese Datensätze _auftauchen_ oder wenn die Tabelle nur aus diesen Datensätzen _besteht_? Im letzteren Fall funktioniert das Statement korrekt.

                    Wenn die Tabelle aus diesen Datensätzen besteht erhalte ich folgende Ausgabe:

                    playlist
                    abc123
                    67657
                    546465
                    --------

                    Ist es nicht möglich unabhängig von Titel zu sortieren? Dkey ist ein automatisch generierter String, wenn dieser einmal festgelegt ist für eine Datei wird sich dieser niemals wieder ändern.

                    1. Ist es nicht möglich unabhängig von Titel zu sortieren? Dkey ist ein automatisch generierter String, wenn dieser einmal festgelegt ist für eine Datei wird sich dieser niemals wieder ändern.

                      Wie genau entsteht denn dkey? Offensichtlich ist es ja nicht das Ergebnis der Titelnamen und sind für die Datenbank damit als Schlüssel nicht wirklich brauchbar.

                      Beispiel:
                      id,userid,playlist,Titel,Kategorie,pkey(Playlistkey),dkey(Dateikey)
                      ---------------------------------------------------------------------
                      1  85  abc123  2  wtaRVr2BIUuDl363Wl  Jm8iSa0AzfmbLgQan
                      6  85  abc123  2  wtaRVr2BIUuDl363Wl  SsOqQ0NiRfxLf1SK5Y
                      7  85  abc123  2  wtaRVr2BIUuDl363Wl  mJm8iSa0AzfmbLgQan

                      oder

                      id,userid,playlist,Titel,Kategorie,pkey(Playlistkey),dkey(Dateikey)
                      ---------------------------------------------------------------------
                      2  85  67657   1  1w4c8mstwUHU9Q1naF  lixlNlQfLAiANbEQ3
                      3  85  abc123  1  wtaRVr2BIUuDl363Wl  MDH6FTASNDURsEC

                      Hier sind jeweils verschiedene dkeys für Titel 2 bzw. 1 erstellt worden. Damit kann ich die Titel in der Datenbank nicht identifizieren, verstehste? ^^

                      Greetz
                        ~ Thilo

          2. Somit schlage ich ein "WHERE ... NOT IN (Subselect)" sowie eine kollektive Schlachtung aller an MySQL Schuldigen vor. Anschließend verfahren wir mit den Herstellern von PHP analog vor, nur aus Prinzip.

            Wie krass! Das konnte ich jetzt gar nicht glauben und musste selbst schaun um mich zu überzeugen! Tatsache...

            Ich habe für Stefan mal die Anfrage gebaut.

              
            SELECT playlist FROM playlists WHERE  
            playlist <> ANY ( SELECT playlist FROM playlists WHERE dkey ='MDH6FTASNDURsEC')  
            
            
            1. Entschuldigt das Doppelposting! Besser wäre die Anfrage mit DISTINCT!

                
              SELECT DISTINCT playlist FROM playlists WHERE  
              playlist <> ANY ( SELECT playlist FROM playlists WHERE dkey ='MDH6FTASNDURsEC')  
              
              

              ~ Thilo

              1. Hallo,
                entschuldigt auch bitte mein Doppel-Posting. Leider bekomme ich bei dieser Abfrage gar kein Ergebnis mehr zurück obwohl ich bei den Datenbankeinträgen wie ich sie habe 1 ergebnis zurück bekommen müsste.

                SELECT DISTINCT playlist FROM playlists WHERE
                playlist <> ANY ( SELECT playlist FROM playlists WHERE dkey ='MDH6FTASNDURsEC')

                  
                  
                Am bessten hat bisher dieser Vorschlag funktioniert:  
                  
                SELECT p2.playlist  
                FROM playlists p1, playlists p2  
                WHERE p1.dkey = 'MDH6FTASNDURsEC'  
                AND p1.Titel = p2.Titel  
                AND p1.playlist <> p2.playlist  
                  
                Wenn ihr diese Datenbankabfrage für mich umdrehen könntet, das genau das gegenteil rauskommt, dann wäre ich sehr glücklich. Vi9elen Dank für eure Mühe!  
                
                
                1. Hi,

                  entschuldigt auch bitte mein Doppel-Posting. Leider bekomme ich bei dieser Abfrage gar kein Ergebnis mehr zurück obwohl ich bei den Datenbankeinträgen wie ich sie habe 1 ergebnis zurück bekommen müsste.

                  SELECT DISTINCT playlist FROM playlists WHERE
                  playlist <> ANY ( SELECT playlist FROM playlists WHERE dkey ='MDH6FTASNDURsEC')

                    
                  nach meinem Verständnis sollte "<> ANY" genauso funktionieren wie "NOT IN", nur dass ich "<> ANY" für eine verwirrende und schwer lesbare Schreibweise halte. Der Effizienz wegen sollte das DISTINCT übrigens auch im Subselect stehen. Darüber hinaus halte ich das Statement für korrekt. Wenn es nicht wie gewünscht funktioniert, fehlen uns offenbar Informationen.  
                    
                  Cheatah  
                  
                  -- 
                  X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
                  X-Will-Answer-Email: No  
                  X-Please-Search-Archive-First: Absolutely Yes
                  
                  1. nach meinem Verständnis sollte "<> ANY" genauso funktionieren wie "NOT IN", nur dass ich "<> ANY" für eine verwirrende und schwer lesbare Schreibweise halte.

                    Ja, in der Tat. Ist die Macht der Gewohnheit.

                    Wenn es nicht wie gewünscht funktioniert, fehlen uns offenbar Informationen.

                    Ich habe mir eine kleine Testtabelle angelegt und es getestet. Es funktioniert definitiv mit den Informationen, die wir haben.

                    @Stefan
                       Übrigens: Tu Dir selbst den gefallen und besorg Dir nen neuen MySQL-Server : )

                    Beste Grüße
                      ~ Thilo