[SQL] MySQL Query Problem

Dieses Thema im Forum "Webentwicklung" wurde erstellt von proHacker, 12. Januar 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 12. Januar 2010
    MySQL Query Problem

    Hallo, ich habe eine Tabelle mit folgender Struktur:
    Code:
    ################################
    ### id ###### plz ##### ort ####
    ################################
    # 1 # 12345 # a #
    # 2 # 67891 # b #
    # 3 # 45642 # b #
    # 4 # 12385 # c #
    # 5 # 98555 # c #
    # 6 # 12685 # c #
    # 7 # 75451 # a #
    # 8 # 46557 # a #
    ################################
    
    Nun würde ich gerne folgende Abfragen ausführen
    Code:
    SELECT * FROM `tabelle` WHERE 
    `id` IN ('5','6','7','8') OR 
    `plz` IN ('67891','12345') OR 
    `ort` IN ('a','b')
    
    Code:
    SELECT * FROM `tabelle` WHERE 
    `id` NOT IN ('4','5') AND
    `ort` NOT IN ('a')
    
    Diese beiden Abfragen müsste ich irgendwie so in einem Select Query bekommen, das ich letztlich die Werte erhalte die in beiden Select Abfragen vorkommen, ich habe schon etliche sachen mit UNION versucht allerdings immer nur mit Fehlermeldungen.

    Beispiel in Pseudocode:
    Code:
    SELECT * FROM `tabelle` WHERE
    (SELECT * FROM `tabelle` WHERE 
    `id` IN ('5','6','7','8') OR 
    `plz` IN ('67891','12345') OR 
    `ort` IN ('a','b'))
    AND
    (SELECT * FROM `tabelle` WHERE 
    `id` NOT IN ('4','5') AND
    `ort` NOT IN ('a'))
    
    Ich kann aus den beiden Selects leider nicht eine machen da die Werte variieren können und auch noch eine Suche in das Query mit reinspielt.

    Das Query was also letztlich ausgeführt werden müsste wenn die Werte statisch wären würde so aussehen:
    Code:
    SELECT * FROM `tabelle` WHERE 
    `id` IN ('5','6','7','8') AND
    `id` NOT IN ('4','5') AND
    `ort` NOT IN ('a') OR 
    `plz` IN ('67891','12345') AND
    `id` NOT IN ('4','5') AND
    `ort` NOT IN ('a') OR 
    `ort` IN ('a','b') AND
    `id` NOT IN ('4','5') AND
    `ort` NOT IN ('a')
    
    Meine Überlegung war schon beide Querys getrennt auszuführen und dann mittels array_intersect() das Ergebnis zu ermitteln aber ich will die Arbeit eigentlich seitens SQL erledigen um den Server zu entlasten.

    Villeicht hat ja jemand die durchbrechende Idee :]
     
  2. 12. Januar 2010
    AW: MySQL Query Problem

    kann es sein das deine id und plz als zahlen angelegt sind?
    vielleicht stimmt die syntax nicht.
    Code:
    SELECT * FROM `tabelle` WHERE 
    `id` IN (5,6,7,8) OR 
    `plz` IN (67891,12345) OR 
    `ort` IN ('a','b')
    
     
  3. 12. Januar 2010
    AW: MySQL Query Problem

    Hi,
    die Abfragen für sich laufen Problemlos ich muss nur beide Abfragen in eine SELECT-Anweisung kombiniert bekommen (siehe Pseudocode)
     
  4. 12. Januar 2010
    AW: MySQL Query Problem

    Code:
    SELECT * 
    FROM `tabelle` 
    WHERE (
     `id` IN ('5','6','7','8') || 
     `plz` IN ('67891','12345') ||
     `ort` IN ('a','b')
    ) && (
     `id` NOT IN ('4','5') &&
     `ort` NOT IN ('a')
    )
    geht nicht?
     
  5. 12. Januar 2010
    AW: MySQL Query Problem

    Tausend dank :]
    genau das ist es
    lächerlich wie einfach das schonwieder aussieht wenn man es weiß, haste villeicht nen Tip für nen gutes SQL Buch wo unter anderem sowas beschrieben wird? Ich habe mich durch 3 Bücher durchgearbeitet ohne was davon zu finden
     
  6. 12. Januar 2010
    AW: MySQL Query Problem

    der teil im WHERE muss true ergeben, genauso wie in php bei IF-abfragen.

    mit ( ) verbindest du ein oder mehrere statements


    Code:
    (true || false) && (true && true) -- true
    (false && true) || (false || true) -- true
    usw...

    am besten du machst dich mal bei wikipedia schlau

    Logischer Operator – Wikipedia
    Boolesche Variable – Wikipedia
     
  7. 12. Januar 2010
    AW: MySQL Query Problem

    Danke, in php bin ich soweit fit nur als Webdesigner habe ich nur selten was mit SQL statements zutun. Wusste nicht das man die wie in einer PHP if verbinden kann und auch nicht das man anstatt AND und OR auch && sowie || verwenden kann.
    Nochmals danke fürs schnelle lösen
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.