subqueries / phpmyadmin

  • hab eine etwas gefinkelte sql abfrage, local auf meinem rechner funktioniert sie, wenn ich das ganze projekt dann aufn webserver gebe bekomm ich eine null-pointer-exception (c#.net) die hängt irgendwie mit der query zusammen, aber ich kanns nicht genau sagen... zum testen hab ich die query per phpmyadmin am server abgesetzt aber da geht dann einfach gar nix.... habs dann mit einer einfach subquery probiert, auch das klappt nicht...

    SQL
    SELECT id FROM gbook WHERE pid=0 AND id NOT IN (SELECT DISTINCT pid FROM gbook);


    ich bekomm dann immer diese meldung zurück, fängt immer bei der subquery an, egal wie komplex es vorher ist bzw was nachher noch kommt:

    Code
    #1064 - Fehler in der Syntax bei 'SELECT DISTINCT pid FROM gbook) LIMIT 0, 30' in Zeile 1.

    kanns sein dass das daran liegt das automatisch das LIMIT 0,30 dazugefügt wird? kann man das wo abstellen?

  • am server 4.0.22 und local irgend was höheres....
    hab jetzt mit einem left join gemacht aber da dauert die abfrage über 10sec, das ist schon lange oder?
    naja mal an index drüber legen und schaun wie es dann ausschaut!

  • Jaja MySQL und Subqueries, am besten vermeiden, wenn möglich, evt. mit Joins oder mit Views arbeiten, oder gleich mit php verarbeiten.

    mfG Fup

  • naja ich hatte es eh zuerst, dass ich zwei queries absetze.... aber ich wollts eben anders machen... ach ja, nachdem ich die indizes reingegeben habe, waren die anfragen auch um ca 500% schneller *gg* jetzt läuft alles wie es soll.

    danke nochmal

  • Bist du sicher daß das die Query ist die du machen willst?

    SQL
    SELECT id FROM gbook WHERE pid=0 AND id NOT IN 
    (
       SELECT DISTINCT pid FROM gbook
    );

    Obiege query bedeutet ja eigentlich:
    Gib mir alle Einträge von gbook die pid gleich 0 haben und die nicht in gbook sind?!
    Wie kann es sein dass es daten gibt mit pid=0 die aber nicht in der Tabelle sind? Da stimmt was anderes nicht.

    Meinst du eventuell:

    SQL
    SELECT id FROM gbook WHERE (pid=0) OR (pid is null)

    LG,
    Martin

  • nein das passt schon so... die tabelle ist so aufgebaut dass sie rekursiv auf sich selber ist, also PID is fremdschlu:ssel auf ID. aber in wahrheit nutze ich die rekursion nur eine stufe, also es gibt "haupteintra:ge" und "antworten".

    und ich will mit der query (und es funktioniert auch) alle haupteintra:ge zuru:ckbekommen die keine antworten besitzen. wenn die pid=0 dann ist es mal ein haupteintrag und dann muss eben gepru:ft werden ob es eh keinen anderen eintrag mit der aktuellen ID als PID gibt! und genau das besagt die query.

    es wa:hre noch zum u:berlegen ob es vllt nicht gscheiter wa:re, wenn ich noch ein attribut zur tablle dazugebe das mir eben anzeigt ob es anworten gibt oder nicht, das kann ich ja zb mita:ndern wenn ich eine antwort einfu:ge.

  • Zitat von Fup

    Jaja MySQL und Subqueries, am besten vermeiden, wenn möglich, evt. mit Joins oder mit Views arbeiten, oder gleich mit php verarbeiten.

    wieso eigentlich?

    irgendwo im nirgendwo in relation zu einem punkt.

  • Zitat von snowfox

    wieso eigentlich?

    Mit Ansi SQL bist du auf der sicheren Seite.

    Man kann zwei Ziele verfolgen.
    1.) Man schreibt in Ansi SQL und vermeidet unnötige komplizierte SQLs
    + man erspart sich das konvertieren der SQLs für eine andere DBMS
    - keine optimierten Abfragen
    - zusätzliche Verarbeitung mit php, ...

    2.) Oder aber man optimiert im speziellen für eine DBMS
    + schnellere Verarbeitung
    - Abfragen können sehr komplex und spezifisch sein, erschwert das Umschreiben

    Ich kenne die genaue Verteilung der genutzten DBMS im Internet nicht, aber ich bin mir ziemlich sicher, dass mySQL eine nicht ganz unwichtige Rolle spielt. mySQL ist keine schlechte DBMS, aber auch nicht so mächtig wie Postgre oder Oracle. Noch dazu ist die 3-er Version von mySQL am stärksten vertreten und die bietet nun mal weder Subqueries, noch Foreign Keys und ...

    mfG Fup

  • unser ADAT lehrer hat mysql immer als mickey-maus-datenbank bezeichnet... er war halt ein oracle fan ;)

    das mit den subqueries und foreign-keys kommt mir irgenwie komisch vor, ich hatte bis vor kurzem eine uralt mysql version und da haben die sachen sicher funktioniert. aber ich kann mich auch ta:uschen

  • Zitat von seHaas

    unser ADAT lehrer hat mysql immer als mickey-maus-datenbank bezeichnet... er war halt ein oracle fan ;)

    das mit den subqueries und foreign-keys kommt mir irgenwie komisch vor, ich hatte bis vor kurzem eine uralt mysql version und da haben die sachen sicher funktioniert. aber ich kann mich auch ta:uschen

    ich würd sagen das hängt davon ab für welche zwecke und welches budget zur verfügung steht. für ein guestbook ist oracle wohl overkill :D

    also bei der 3er version funzt es sicher nicht :)

    irgendwo im nirgendwo in relation zu einem punkt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!