Skip to main navigation Skip to main content Skip to page footer
Bezahlung
 
 
AND vs OR
 
Autor: yamen Ellouze Datum: 8-02-10 19:36:29
 
Nun Ja,
SQL-Erklärung
select * from A where B1 AND B2 OR B3
liefert die Zeilen, die B1 und B2 erfüllen aber auch die, die B1 und B2 nicht erfüllen dafür aber B3
-----------------------------------
select * FROM tt_products_articles article
JOIN tt_products_products_mm_articles ON article.uid = tt_products_products_mm_articles.uid_foreign
WHERE tt_products_products_mm_articles.uid_local =98
AND tt_products_products_mm_articles.deleted =0
AND tt_products_products_mm_articles.hidden =0
liefert alle Article die dem product uid=98 zugewiesen sind.
Dies ist ja auch richtig so!
packst Du noch die Bedingungen (wird B nachher gennant) noch dazu
(
article.color = '072 stone'
OR article.color LIKE '%;072 stone;%'
OR article.color REGEXP '^(072 stone)[[:blank:]]*[[.semicolon.]]'
OR article.color REGEXP '[[.semicolon.]][[:blank:]]*(072 stone)$')
OR
(article.size = '50/100' OR article.size LIKE '%;50/100;%'
OR article.size REGEXP '^(50/100)[[:blank:]]*[[.semicolon.]]'
OR article.size REGEXP '[[.semicolon.]][[:blank:]]*(50/100)$' )

geht die Bedingung tt_products_products_mm_articles.uid_local =98 verloren und werden alle Zeilen, die diese Bedingung erfüllen aufgelistet aber auch (aufgrund des OR) die bedingung mit der Grösse.
Also wie ich jetzt deine Erklärung verstanden habe, soll die OR bleiben dafür muss die Bedingung "B"
in klammern gepackt werden also AND (B).
Sonst kriegt man falsche Ergebnisse zurück.
=> select * from A where B1 AND (B2 OR B3)
Ich hoffe, es ist damit jetzt klar geworden.
VG