Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Ich hab drei Tabellen über die ich eine Abfrage ausführen will.

rezepte (hier stehen die Rezepte an sich drin):

--------------------------------------------------------------------------------------

| id (int) | titel (varchar) | rezeptkategorie (int) | zubereitung (blob) | bildlink (varchar) |

--------------------------------------------------------------------------------------

rezeptzutaten (hier stehen die Zutaten drin, die man für die Rezepte braucht):

-------------------------------------------------------------

| id (int) | zutatenid (int) | rezeptid (int) | einheiten (double) |

-------------------------------------------------------------

zutatenliste (das ist eine Liste von Zutaten, mit Namen und entsprechenden Einheiten (g, ml, stk, etc.)):

----------------------------------------------------

| id (int) | bezeichnung (varchar) | einheit (varchar) |

----------------------------------------------------

ich hab noch eine Tabelle rezeptkategorien, die tut hier aber nichts zur sache...

Nun soll es möglich sein, wenn man als parameter eine zutat(enliste) bekommt eine abfrage zu starten, welche die rezepte zurück gibt, welche diese wenigstens eine dieser zutaten beinhaltet...

wenn ich mich richtig erinnere kann man ja in der IN Klausel eine Select abfrage ausführen...

so sieht meine Abfrage aus, doch ich bekomme immer eine fehlermeldung:



select t1.titel, t2.bezeichnung, t3.einheiten, t2.einheit, t1.zubereitung, t1.bildlink 

  from rezepte as t1, zutatenliste as t2, rezeptzutaten as t3 

  where 

    (t1.id = t3.rezeptid and 

     t2.id = t3.zutatenid) and

    t2.bezeichnung IN (


select t1.titel

  from rezepte as t1, zutatenliste as t2, rezeptzutaten as t3 

  where 

    (t1.id = t3.rezeptid and 

     t2.id = t3.zutatenid) and

    t2.bezeichnung IN ("Butter")

  group by t1.titel


)

  order by t1.titel


beide abfragen einzeln funktionieren und tun auch was sie sollen, aber zusammen bringen sie "You have an error in your SQL syntax"

hab auch schon versucht die aliase im subquery weg zu lassen, also daran scheint's net zu liegen

wahrscheinlich ist es was popeliges, aber ich find's einfach net...

wäre nett wenn mir jemand helfen könnte...

  • Autor

ok hat sich erledigt, hab den fehler gefunden...es sind eigentlich zwei...



 t2.id = t3.zutatenid) and

    t2.bezeichnung IN (


select t1.titel


kann ja net gehen, es müsste statt t2.bezeichnung IN - t1.titel IN heißen...

auf meinem webspace geht die abfrage trotzdem nicht, aber das scheint wohl ein rechte problem zu sein auch wenn der mir syntaxfehler ankreidet denn auf meinem localhost und auf meinem vserver gehts...

Wenn Du mit JOINs arbeiten würdest, wäre das ganze etwas übersichtlicher.

Eine andere Sache, aber das ist nur mein persönlicher Geschmack: Ich verwende für die Aliase etwas sprechendere Versionen, in Deinem Beispiel r für Rezepte, z für Zutaten und rz für Rezeptzutaten. Verwechslungen sind dann etwas seltener.

Und aus Anwendersicht: Ich würde diese Abfrage nur auf Eigenschaften von r ausführen. Wenn ich etwas mit Ingwer kochen will, dann interessiert mich als Ergebnis der Abfrage eine Liste der Rezepte, die Ingwer enthalten, vielleicht noch Bild, Zubereitungszeit und Summe der Zutatenpreise. Weitere Angaben erst dann, wenn ich mir die Detailansicht eines Rezeptes aufrufe.


select r.titel, r.bildlink 

from rezepte as r

join rezeptzutaten as rz on r.Id = rz.rezeptId

join zutatenliste as z on z.id = rz.zutatenId

where z.bezeichnung in ("Ingwer")

order by r.titel	

  • Autor

Danke für den tip ich werd's mal im Team in die Runde werfen...

Joins hab ich noch nie benutzt ich habs schon immer so (umstandlich) gemacht...alte macken wird man schwer los :)

Joins hab ich noch nie benutzt ich habs schon immer so (umstandlich) gemacht...alte macken wird man schwer los :)

Dann würde ich jetzt damit anfangen, ohne JOINS macht eine Relationale Datenbank praktisch keinen Sinn....

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.