2009-03-26 6 views
1

Wie würde ich die folgenden zwei Abfragen kombinieren, um eine Kombination der beiden zu erzeugen?Kombinieren von zwei MySQL-Abfragen (eine zum Auswählen von Inhalten einer anderen)

SELECT * 
FROM post_attributes 
WHERE name IN ('title', 'body'); 

SELECT id, url, created_at, name, value 
FROM posts, post_attributes 
WHERE posts.id = post_attributes.post_id 
ORDER BY id; 

Die Idee wäre, die Postnummer zu extrahieren, es ist URL, die Zeit, es wurde den Titel und den Körper der Blog-Post von der Blogging-Engine Chyrp, erstellt, aber die anderen Daten in der gleichen Datenbank gespeichert außer Acht lassen .

Ich denke, dass ich in der falschen Weise darüber gehe. Würde es eine geeignetere Funktion geben?

+0

Am zweiten Gedanken, Sie haben nicht gesagt, welche der Spalten gehören, an die Tabelle (in der zweiten Abfrage) – karim79

Antwort

4
SELECT posts.id, posts.url, posts.created_at, posts.name, posts.value 
    FROM posts, post_attributes 
WHERE posts.id = post_attributes.post_id 
AND post_attributes.name IN ('title', 'body') 
ORDER BY id; 

eine post_attributes.* zum Ende hinzufügen, wenn Sie von Post Attribute alle Felder wollen.

+0

FLüCHE ... nur 20 Sekunden zu langsam – belgariontheking

+0

einfach ein Kommentar. Ich denke, sowohl Ihre Abfrage als auch die Abfrage von @ FerranB ergeben zwei Zeilen für jeden passenden Blog-Eintrag (einen für das Titelattribut und einen für den Hauptteil). I _think_ die Abfrage, die ich gepostet habe, ergibt eine Zeile pro Post. Nicht sicher, ob @nickcarlton kümmert. –

+0

@ Jeremy: Guter Punkt. – belgariontheking

2

Suchen Sie diese:

SELECT id, url, created_at, name, value, post_attributes.* 
    FROM posts, post_attributes 
WHERE posts.id = post_attributes.post_id 
    AND name IN ('title', 'body') 
ORDER BY id; 
0

Nicht sicher, ob dies die effizienteste ist, aber dies sollte funktionieren (unter der Annahme, dass post_attributes eine Spalte ‚Wert‘ benannt, die den Attributwert speichert).

SELECT id, url, created_at, name, value, p_title.value, p_body.value 
FROM posts p 
INNER JOIN post_attributes p_title on p.id = p_title.post_id 
INNER JOIN post_attributes p_body on p.id = p_body.post_id 
ORDER BY p.id; 
0

Fantastische Leistung:

select p.id, pa.title, pa.body, pa.created_at, pa.name, pa.value from post_attributes pa, posts p where p.id = pa.post_id and (pa.name = 'title' or pa.name = 'body') 
Verwandte Themen