 |
Medlem
|
|
Reg.datum: Oct 2004
Inlägg: 216
|
|
Medlem
Reg.datum: Oct 2004
Inlägg: 216
|
Mysql join 2 ggr på samma tabell (wordpress)
Jag har en vanlig wordpress-installation.
Varje sida i min blogg motsvarar en produkt. Produkten har två priser, beroende på vilken typ det är. Dessa lagrar jag som post meta till sidan. En sida kan alltså exempelvis ha "price_current1" = "12" och "price_current2" = "10". En del sidor har endast ett pris, då lagrar jag endast "price_current1". Dessutom har sida/produkt ett orginalpris, exempelvis "price_org1" = "30" och "price_org2" = "20".
Det jag vill göra är att jag vill ta fram en lista med alla sidor/produkter som har ett pris som är lägre än orginalpris, inklusive prisskillnaden.
Tidigare har jag först selekterat fram detta i två frågor, men det jag undrar är om det är möjligt att göra det i en enda fråga så att samma produkt inte kan dyka upp två gånger.
Mina två frågor (som är nästan likadana) ser i nuläget ut så här:
SELECT posts.*, ROUND(A.meta_value) AS price_current,
ROUND(B.meta_value) AS price_org, ROUND((A.meta_value / B.meta_value) * 100 - 100) AS price_diff FROM posts, postmeta A, postmeta B WHERE ID = A.post_id AND ID = B.post_id AND A.meta_key = 'price_current1' AND B.meta_key = 'price_org1' AND B.meta_value > A.meta_value AND post_status = 'publish' AND post_type = 'post' ORDER BY price_org DESC
SELECT posts.*, ROUND(A.meta_value) AS price_current,
ROUND(B.meta_value) AS price_org, ROUND((A.meta_value / B.meta_value) * 100 - 100) AS price_diff FROM posts, postmeta A, postmeta B WHERE ID = A.post_id AND ID = B.post_id AND A.meta_key = 'price_current2' AND B.meta_key = 'price_org2' AND B.meta_value > A.meta_value AND post_status = 'publish' AND post_type = 'post' ORDER BY price_org DESC
Problemet jag är är alltså att samma sida/produkt kan dyka upp i båda listorna. Min förhoppning är att det går att göra allt i en enda fråga och slippa få dubletter.
Går det att slå ihop dessa två frågor till en enda fråga? Hur?
|