Vinzenz Mai: SQL Abfrage

Beitrag lesen

Hallo,

» SELECT SQL_CALC_FOUND_ROWS rezepte.* FROM rezepte LEFT JOIN zutaten ON zutaten.rezept_id = rezepte.id WHERE zutaten.zutat = 'Krabben' AND zutaten.zutat = 'Zwiebel' ORDER BY rezept LIMIT 0,11

siehste, und wie kann nun zutaten.zutat gleichzeitig "Krabben" UND "Zwiebel" sein? Du meinst "oder", nicht "und".

günstiger erscheint mir

  WHERE  
      zutaten.zutat [link:http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in@title=IN] ('Krabben', 'Zwiebeln')

Außerdem möchte der OP sicherlich, dass ein Rezept nur einmal angezeigt wird, auch wenn mehrere Zutaten aus der Zutatenliste passen. Deswegen rate ich zum Einsatz von

[link:http://dev.mysql.com/doc/refman/5.1/en/select.html@title=SELECT DISTINCT]

oder zur Verwendung eines Subselects statt des LEFT JOINs, der sowieso besser ein INNER JOIN wäre:

SELECT              -- Gib mir  
    *               -- alle Spalten  
FROM                -- aus  
    rezepte         -- der Tabelle rezepte  
WHERE               -- wobei nur solche Datensätze berücksichtigt werden,  
    id IN (         -- deren ID in der Liste der IDs vorkommt  
    SELECT          -- die  
        rezept_id   -- aus den rezept_ids besteht  
    FROM            -- in deren  
        zutaten     -- Zutaten  
    WHERE           -- die gesuchten  
        zutat IN ('Krabben', 'Zwiebeln')  -- Krabben oder Zwiebeln enthalten sind  
)  

Freundliche Grüße

Vinzenz