FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Medlem
|
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? |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Medlem
|
Ingen? Känns som om lösningen är lätt - men det står bara stilla i hjärnan.
|
|||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Har WN som tidsfördriv
|
Nu såg jag inte om det var något mer som skiljer sig i frågan men detta kanske funkar för dig..
Kod:
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' ) OR ( 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 Senast redigerad av najk den 2011-11-22 klockan 07:52 |
|||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Medlem
|
najk: Som jag trodde var lösningen lätt. Men jag hade nog aldrig lyckas lista ut det utan din hjälp. Stort tack!!!!
|
|||
![]() |
![]() |
Svara |
|
|