Hilfe zu Mysql

  • 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?

    Zitat

    SQL-DATABASE ERROR

    Database error in WoltLab Burning Board (2.3.6): Invalid SQL: SELECT * FROM bb1_kt_paare p WHERE NOT p.paarid IN (SELECT u.paarid FROM bb1_kt_usertipps u WHERE p.paarid = u.paarid AND u.userid = '615')
    mysql error: 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 'SELECT u.paarid FROM bb1_kt_usertipps u WHERE p.paarid = u.paar
    mysql error number: 1064
    mysql version: 4.0.27-standard
    php version: 4.4.9
    Date: 07.07.2009 @ 23:28

    "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 (7. Juli 2009 um 23:52)

  • Das Problem bleibt... der Fehler liegt ja irgendwie zu Beginn des 2. Selects...

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

  • 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*

  • 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

  • Zitat

    Original von Eric
    Ich bin mir nicht 100% sicher, ob nicht statt

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

    die richtige Syntax

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

    wäre.

    Funktioniert auch nicht...

    Zitat


    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?)

    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

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

  • 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):

    Zitat

    SQL-DATABASE ERROR

    Database error in WoltLab Burning Board (2.3.6): Invalid SQL: SELECT * FROM bb1_kt_paare p LEFT JOIN bb1_kt_usertipps u ON p.paarid = u.paarid WHERE u.paarid is NULL AND u.userid = 615)
    mysql error: 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 ')' at line 1
    mysql error number: 1064
    mysql version: 4.0.27-standard
    php version: 4.4.9
    Date: 08.07.2009 @ 13:21

  • 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

  • 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 (8. Juli 2009 um 15:32)

  • 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

  • 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");