webForumDet fria alternativet

Hämta huvudposter med tillhörande språkposter och klumpa ihop?

Databaser & SQL

4 svar · 1 625 visningar · startad av bassebhu

Medlem sedan nov. 20016 480 inlägg
Frågan#1

Hej igen alla glada!

Jag har nu lyckats lista mina huvudposter från tabell_a med tillhörande språkposter från tabell_b. När jag skriver ut det får jag dock en rad per språkpost och inte en rad per huvudpost. Vilket alltså är det jag behöver hjälp med :)

Min kod just nu:

SELECT * FROM tabell_a
INNER JOIN tabell_b
ON a_id = b_parent_id

Låt säga att detta hittar Post 1 i tabell_a och en svensk och en engelsk post i tabell_b. Nu skrivs det ut:

Post 1 (Svenska)
Post 1 (Engelska)

Hur får jag det att bara skriva ut:
Post 1

GROUP BY? DISTINCT?

Edit/ Jag skulle kunna lägga till ett WHERE b_lang = 'sv' och bara få ut dessa poster, men kommer jag då åt att kolla om det finns någon engelsk post utan att göra en loop per post som jag har förstått är det dummaste man kan göra? :e

---

Från början skapas alltid en huvudpost i tabell_a och en svensk post i tabell_b. Därefter kan man lägga till en engelsk post om man vill...

Fråga två med lite smyg-PHP är därefter: när jag skriver ut raderna, hur kollar jag om det finns någon engelsk post eller inte? Jag skriver nämligen ut en redigeringsknapp vid varje rad och om det inte redan finns en engelsk post vill jag skriva ut en lägg till-knapp och annars en redigeringsknapp.

Tack för hjälp!

Medlem sedan juni 201161 inlägg
#2

Jag fattar nog inte riktigt vad du vill uppnå. Vill du ha ut alla rader från tabell_a för vilka det finns minst en matchande rad i tabell_b? I så fall använder du:

SELECT *
FROM tabell_a
WHERE EXISTS(SELECT * FROM tabell_b WHERE b_parent_id = a_id)
Medlem sedan nov. 20016 480 inlägg
#3

Det skapas alltid en post i tabell a (huvudposterna) och en i b (språkpost på svenska). Därefter kan man lägga till ytterligare en språkpost på engelska i tabell b om man vill. Det finns alltså alltid minst en post i tabell b som hör till huvudtabellen.

Det jag vill göra är att hämta alla poster i tabell a och komma åt de svenska språkposternas data i tabell b också (varav min join), MEN för varje rad jag skriver ut vill jag med php kunna kolla om det finns en engelsk språkpost också (fältet b_lang innehåller antingen 'sv' eller 'en').

Med min kod skrivs det ut dubletter för alla poster som även har en engelsk post. Jag vill slå ihop dem till en post och samtidigt kunna göra en if-sats och kolla om det finns en engelsk post eller inte.

Går att förstå hehe? Tack!

Medlem sedan juni 201161 inlägg
#4

Okej,
Vad sägs om:

SELECT tabell_a.*, tabell_b.*,
(SELECT COUNT(*) FROM tabell_b WHERE b_lang = 'en' AND b_parent_id = a_id) hasEnglish
FROM tabell_a 
INNER JOIN tabell_b
ON a_id = b_parent_id
AND b_lang = 'sv'
Medlem sedan nov. 20016 480 inlägg
#5

Oldtimer skrev:

Okej,
Vad sägs om: [...]

Förgrymligt bra sägs det! :birp Tack!

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)