"Verschachtelte" Abfrage

Jerry79BY

Grünschnabel
Hallo!

Ich stehe auf dem Schlauch.

Ich möchte eine Tabelle füllen, tue mich aber schwer die Daten zusammen zu bekommen.
Habe jetzt zwei "Lösungsansätze", aber keine Funktioniert. Die einzelnen Select-Abfragen liefern (laufen sie alleine) jeweils das richtige Ergebnis, sofern ich meine "data_id" manuell angebe, nur bekomme ich sie nicht zusammen als Variable. Tabelle bleibt leer. Wo mache ich den Fehler?

Variante 1:
Code:
$sql = "SELECT * FROM `user` WHERE meta_key='Artikelbezeichnung' AND data_id=(SELECT data_id FROM `user` WHERE meta_value=$id AND meta_key='id')";
foreach ($pdo->query($sql) as $row)

Variante 2:
Code:
$abfrage = "SELECT data_id FROM `user` WHERE meta_value=$id AND meta_key='id'";

$sql = "SELECT * FROM `user` WHERE meta_key='Artikelbezeichnung' AND data_id=$abfrage";
foreach ($pdo->query($sql) as $row)
 

Sempervivum

Erfahrenes Mitglied
Die Variante 1 habe ich mit Mockup-Daten getestet und sie funktioniert, d. h. sie liefert ein Ergebnis wenn es zwei Datensätze gibt, einmal mit "Artikelbezeichung" und dann mit "id" wo `data_id` gleich ist. Vermutlich liegt der Fehler irgend wo anders.
 

basti1012

Erfahrenes Mitglied
Variante 2 ist doch Blödsinn.
Oder soll die erste Abfrage als String in der 2ten landen ?
Du aolltest uns mal mehr input geben.
Warum und was stehen in die 2 Tabellen ?
Wie sieht die Struktur aus?
PHP:
$abfrage = "SELECT data_id FROM `user` WHERE `meta_value`='$id' AND `meta_key`='id'";
$result = mysqli_query($mysqli,$abfrage);
if(mysqli_num_rows($result) >=1){
    $row=mysqli_fetch_array($result);
    $from_tabelle_1=$row['data_id']);

    $sql = "SELECT * FROM `user` WHERE meta_key='Artikelbezeichnung' AND `data_id`='$from_tabelle_1'";
}
// ab hier dein blaq bla
Psydocode
Den Code wollte ich dir erst schreiben.
Mit Select ein Wert aus der Tabelle holen, und den Wert in der nächsten Select einfügen.
Das würde ich aus deiner Variante 2 machen.

Wenn wir deine genau Struktur kennen würden könnten wir dir besser helfen.
ES gibt auch JOIN und noch einiges mehr die so was wie deine Variante 2 (oder meine Variante davon) unnötig und einfacher machen.
 

Sempervivum

Erfahrenes Mitglied
Variante 2 ist doch Blödsinn.
Oder soll die erste Abfrage als String in der 2ten landen ?
Du aolltest uns mal mehr input geben.
Kein Blödsinn, die erste Abfrage landet als String in der zweiten:
Code:
AND data_id=$abfrage";
Allerdings fehlen dann die Klammern um diese Subquery.
 

Zvoni

Erfahrenes Mitglied
Getestet in SQLite:
SQL:
SELECT T1.* FROM 'user' As T1
INNER JOIN
'user' AS T2
ON
T1.data_id=T2.data_id AND
T2.meta_key='ID'  AND
T2.meta_value='Value4'
WHERE
T1.meta_key='Artikelbezeichnung'
Der Parameter kommt in das "T2.meta_value='Value4'"
 

Neue Beiträge