Kom ihåg mig?
Home Menu

Menu


Mysql join 2 ggr på samma tabell (wordpress)

Ämnesverktyg Visningsalternativ
Oläst 2011-11-20, 13:59 #1
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Standard 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?
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-11-21, 19:42 #2
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Ingen? Känns som om lösningen är lätt - men det står bara stilla i hjärnan.
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-11-22, 07:50 #3
najks avatar
najk najk är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2005
Inlägg: 1 224
najk najk är inte uppkopplad
Har WN som tidsfördriv
najks avatar
 
Reg.datum: Oct 2005
Inlägg: 1 224
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
Du kan ju också lägga till en SELECT DISTINCT posts.id, om koden ovan lämnar dubbla resultat.

Senast redigerad av najk den 2011-11-22 klockan 07:52
najk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-11-22, 08:08 #4
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
najk: Som jag trodde var lösningen lätt. Men jag hade nog aldrig lyckas lista ut det utan din hjälp. Stort tack!!!!
swan är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 03:34.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017