Hilfe zu Mysql

    • Offizieller Beitrag

    Irgendeiner eine Idee, warum folgende Zeile:


    Code
    $db_top = $db->query("SELECT * FROM bb".$n."_kt_paare p WHERE NOT p.paarid IN (SELECT u.paarid FROM bb".$n."_kt_usertipps u WHERE p.paarid = u.paarid AND u.userid = ".$zuser.")");


    einen Mysql Fehler 1064 auswirft?


    "We are the unknowns. Lower your shields and surrender your ships. We will add your biological and technological distinctiveness to our own. Your culture will adapt to service us. Resistance is futile."


    Meine Spiele: Klick mich

  • Zitat

    Original von Sankt Peter
    Irgendeiner eine Idee, warum folgende Zeile:


    Code
    $db_top = $db->query("SELECT * FROM bb".$n."_kt_paare p WHERE NOT p.paarid IN (SELECT u.paarid FROM bb".$n."_kt_usertipps u WHERE p.paarid = u.paarid AND u.userid = ".$zuser.")");


    einen Mysql Fehler 1064 auswirft?


    Gut meinen SQL Kenntnisse sind nicht mehr so frisch, aber in der Abfrage ist genau der eine Part, den die Fehlermeldung moniert irgendwie auch doppeltgemoppelt. Sprich: WHERE p.paarid = u.paar
    Zum einen willst du keine doppelten, aber im zweiten Select wählst du genau diese. Lass einfach den Part weg, würde ich vorschlagen, also nur noch WHERE u.userid = ".$zuser."

    2 Mal editiert, zuletzt von stmountain ()

  • Zitat

    Original von Sankt Peter
    Irgendeiner eine Idee, warum folgende Zeile:


    Öhm, die Verwendung von p.paarid scheint hier falsch zu sein. Statt eines Subselects solltest Du vielleicht eher einen LeftJoin der beiden Tabellen machen und dann die WHERE-Klausel darauf anwenden..


    Probiers mal.

    • Offizieller Beitrag
    Zitat

    Original von unittype001


    Öhm, die Verwendung von p.paarid scheint hier falsch zu sein. Statt eines Subselects solltest Du vielleicht eher einen LeftJoin der beiden Tabellen machen und dann die WHERE-Klausel darauf anwenden..


    Probiers mal.


    Ja, irgendwie hängt er an dem "IN"...


    Leider sind meine SQL Zeiten geschätzte 10 und gefühlte 20 Jahre her. Eine normale Select Anweisung ist ja noch machbar aber diese verschachtelten Dinge ... mhhhh?!? Gibt es irgendjemanden, der so etwas aus dem Ärmel schütteln kann? *hoff*

    • Offizieller Beitrag

    Oh, Danke für den Link - der könnte auf den ersten Blick weiterhelfen - muß ich mir allerdings mal in Ruhe zu Gemüte führen...


    Ich kann mich noch erinnern, wie ich in der 11. Klasse Informatik gewählt hatte. Zwei Wochen später wurde in der Schule eingebrochen und die Computer geklaut... Als Ersatz haben wir dann Datenbanktheorie gemacht - man haben wir uns gefreut :(

  • Ich bin mir nicht 100% sicher, ob nicht statt


    ... WHERE NOT p.paarid IN ( ...


    die richtige Syntax


    ... WHERE p.paarid NOT IN ( ...


    wäre.



    Ansonsten nach Attilas Anleitung umgestellt müsste das wohl so aussehen:


    ("SELECT * FROM bb".$n."_kt_paare p LEFT JOIN bb".$n."_kt_usertipps u
    ON p.paarid = u.paarid WHERE u.paarid is NULL AND u.userid = ".$zuser.")"



    Ob das ganze inhaltlich dann auch noch macht was Du vor hast, ist dann natürlich auch noch eine ganz andere Frage... (Du suchst alle Einträge in p, die nicht zu einem festen User aus u gehören?)

  • Hiho,


    Stimmt! - Es muss "WHERE xxx NOT IN" heissen, nicht "WHERE NOT xxx IN" ...


    Atti

    • Offizieller Beitrag


    Funktioniert auch nicht...



    Das bringt bei mir folgenden Fehler:

    Zitat

    Parse error: syntax error, unexpected T_STRING in /homepages/37/d247992905/htdocs/wbb2/kt_admin.php on line 1312

  • Hiho,


    Du musst es schon in einer PHP-Konformen Syntax eingeben! :)


    Am Anfang steht eine Klammer, am einde ist sie aber im Sting drinne. Eins davon muss falsch sein.


    Atti

    • Offizieller Beitrag

    Schon klar...


    Also die alte Zeile sieht so aus:


    $db_top = $db->query("SELECT * FROM bb".$n."_kt_paare p WHERE p.paarid NOT IN (SELECT u.paarid FROM bb".$n."_kt_usertipps u WHERE p.paarid = u.paarid AND u.userid = '".$zuser."')");


    Und die neue Zeile dah dann so aus:


    $db_top = $db->query("SELECT * FROM bb".$n."_kt_paare p LEFT JOIN bb".$n."_kt_usertipps u ON p.paarid = u.paarid WHERE u.paarid is NULL AND u.userid = ".$zuser.")";


    Müsste doch richtig sein...

    • Offizieller Beitrag

    Ok, Syntax war wirklich noch falsch... Tausende von Klammern...


    Jetzt ist der Syntax Fehler weg aber der SQL Fehler wieder da (mit der neuen Abfrage):



  • Ehy, was benutzt du für einen Editor, das dir das nicht anzeigt das es falsch ist?
    Das ")" am Ende bezieght sich auf welche ( ???? :)


    Zitat

    $db_top = $db->query("SELECT * FROM bb".$n."_kt_paare p LEFT JOIN bb".$n."_kt_usertipps u ON p.paarid = u.paarid WHERE u.paarid is NULL AND u.userid = ".$zuser);


    Sollte zumindest von den PHP Syntax richtig sein.


    Atti

  • Hiho,


    Die Klammer am Ende gehört da nicht hin (im SQL_Statement).


    Atti

    • Offizieller Beitrag

    Super - also jetzt geht es schon mal - macht aber noch nicht das, was es soll...


    In einer Tabelle sollen für einen bestimmten User Kicktipps eingetragen werden, und zwar für alle Spiele, die er noch nicht getippt hat... Das funktioniert nicht - derzeit werden 0 Tipps eingetragen...


    Irgendeine Idee, warum diese Abfrage anscheinend inhaltlich noch etwas anderes tut, als die ursprüngliche? Das "IS NULL" stimmt doch nicht - oder?


    Also ich benötige irgendwie eine Abfrage die folgendes macht:


    - Schaue in der Tabelle KT_PAARE welche Spiele es gibt und prüfe dann in der Tabelle KT_USERTIPPS welche Spiele ein bestimmter Tipper davon schon getippt hat. Diese sollen nicht mit selektiert werden. Das Ergebnis sind also alle tippbaren Spiele, die dieser Spieler noch nicht getippt hat.


    Für diese wird dann im weiteren Quellcode ein Zufallstipp eingetragen.

  • das scheint schwieriger zu sein ohne Schachtelung als gedacht...

    Einmal editiert, zuletzt von Eric ()

  • Ich hoffe ich hab dich richtig verstanden:



    Hier sind die Paarungen, die userid=1 noch nicht getippt hat (user 1 hat nur 3, 5 und 7 getippt

    • Offizieller Beitrag

    Ok ... ich werde es mal probieren - aber erst nachher... Danke für die Hilfe!!!


    Ist das für php so richtig:


    $db_top = $db->query("SELECT p.paarid FROM bb".$n."_kt_paare p LEFT JOIN bb".$n."_kt_usertipps u ON (p.paarid=u.paarid AND u.userid='".$zuser."') WHERE u.paarid is null");

  • Zitat

    Original von Sankt Peter



    Ist das für php so richtig:


    Ja, so finde ich es besser lesbar:


    Code
    $query = "SELECT p.paarid FROM bb{$n}_kt_paare p LEFT JOIN bb{$n}_kt_usertipps u ON "
    . "(p.paarid=u.paarid AND u.userid='{$zuser}') WHERE u.paarid is null";
    
    
    $db_top = $db->query($query);