While Schleife in SQL Abfrage

Azubis

Grünschnabel
Hi!
Ich steh etwas auf dem Schlauch ;)

Ich muss Datensätze mit Datensätzen aus einer anderen MySQL Tabelle abgleichen.
Dazu hab ich folgenden Query:

PHP:
SELECT * FROM aufgaben_abfolge WHERE loesungsid = '0' AND naechsteaufgabeid = ".$naechsteaufgabe["naechsteaufgabe"]." AND aufgabeid != 2

Funktioniert wunderbar. Abgesehen vom letzten Teil. Statt der 2, sollte aus der Tabelle erledigte_aufgaben die aufgabenid überbprüfen. Da es dort aber mehr als nur einen Eintrag gibt, muss da wohl eine Schleife her. Nur wie pack ich eine Schleife in die Query?

Danke!

Gruß
Azubis
 
Also auf jeden Fall würde des ganze mit PL/SQL funktionieren.
Aber wenn ich dich richtig verstanden habe möchtest ja sozusagen direkt in deinem Select-Statement eine Schleife einbauen, oder?

Würd dir aber trotzdem eher zu PL/SQL raten.
 
Direkt im SQL Statement wäre natürlich am besten, denn PL/SQL sagt mir garnichts :P

Falls es keine andere möglichkeit gibt, müsste ich mich da eben einlesen.
 
Ist schon möglich das es eine Möglichkeit im Select gibt. Mir fällt dazu aufjeden Fall nichts ein. Löse sölche Sachen eben lieber immer gleich mit PL/SQL, weil es ja eben genau für solche Sachen da ist. Eben eine prozenduralle Sprache für SQL.
Aber keine Angst PL/SQL ist wirklich nicht schwer. Hat eben nur einige Syntax sondern wie zum Beispiel das man Wertezuweisung mit variable := 5 und nicht wie sonst üblich mit einem =
Gibt auch gut seite im Internet. Einfach mal googlen!
 
also soweit ich weiß brauchst du nichts besonderes. Hab aber noch nie probiert pl/sql und php "gemeinsam" zu verwenden.

Andererseits: könntest du einfach zwei select anweisungen machen, eine die dir alle "naechsteaufgabe" zurück gibt und diesen Wert setzt du dann in deine jetzt schon vorhanden select.
Also damit mein ich das du über dein jetztiges Select einfach ein zweiter darüber legt die alle "naechsteausgabe" ausgibt, diese werte dann in die zweite Select füttern.

Wär wahrscheinlich besser
 
Hi,
ich denke das hier kann dir weiterhelfen: ALL
PHP:
$query = "SELECT * FROM aufgaben_abfolge WHERE loesungsid = '0' AND naechsteaufgabeid = ".$naechsteaufgabe["naechsteaufgabe"]." AND aufgabeid <> ALL (SELECT aufgabenid FROM erledigte_aufgaben)";
Ich hoffe ich hab dich richtig verstanden. Evtl. brauchst du noch ein WHERE in dem Sub-Statement.

Grüße und so
DJ
 
Nein, Du brauchst keine Schleife, auch kein PL/SQL (ORACLE!?) und kannst das Problem auch ohne Verwendung von Sub-Selects lösen.

Das Zauberwort heißt "JOIN" - mit JOINs kannst Du mehrere Tabellen verknüpfen und Gemeinsamkeiten ausgeben. Ebenso kannst Du JOINs verwenden, um aus der Tabelle A alle Einträge zu bekommen, die in der Tabelle B nicht vorhanden sind.

Schau Dir hier mal den "Left outer join" an -der müsste das sein, was Du suchst:

http://www.codinghorror.com/blog/archives/000976.html

Und hier die Referenz zu MySQL JOINs:

http://dev.mysql.com/doc/refman/5.1/de/join.html
 
Danke erstmal an alle.

PL/SQL lass ich dann vorerst mal lieber.

Die Unterabfrage scheint mir logisch zu sein, werde ich ausprobieren.

Und bei dem Join. Ich habs mit nem inner join versucht und hab mich gewundert warum es nicht funktioniert :D


Ich melde mich dann wieder was funktioniert hat und was nicht.


Edit: Die Unterabfrage funktioniert einwandfrei.
 
Zuletzt bearbeitet:
Zurück