webForumDet fria alternativet
Logga in / Bli medlem

Urval i flera tabeller.

Databaser & SQL

5 svar · 427 visningar · startad av dahlgren

Medlem sedan aug. 20011 946 inlägg
Trådstart#1
      $query_head = "SELECT DATE_FORMAT(a.created, '%Y-%m-%d')AS created, a.headline, c.name, c.id, c.parent_section, a.id as art_id FROM Articles a left join Categories c on a.category_id=c.id WHERE a.category_id <> 39 ORDER BY a.id DESC LIMIT 4";

Frågan ovan fungerar fint men jag skulle vilja ändra urvalet så att det inkluderar tidne som finns i en tabell history också när den plockar fram de 4 senaste artiklarna. Kopplingen mellan history och article är att history.content_id är samma som Article.id. Hur löser jag det? Då blir det väl 3 tabeller som måste vara med i FROM? Har aldrig gjort något liknande, tacksam för hjälp.

Medlem sedan dec. 19996 721 inlägg
#2

Jag är inte riktigt med på vad du ville ha med från history, men för att inner-joina den kan du skriva så här

SELECT DATE_FORMAT(a.created, '%Y-%m-%d') AS created, a.headline, c.name, c.id, c.parent_section, a.id as art_id FROM Articles a[b], history h[/b] 
left join Categories c on a.category_id=c.id
WHERE [b]a.id=h.content_id AND [/b]a.category_id <> 39 ORDER BY a.id DESC LIMIT 4
Medlem sedan aug. 20011 946 inlägg
#3

Just nu kollar ju frågan efter de 4 högsta id numrena för att få fram den senaste. Det villkoret kommer inte fungera eftersom jag vill ha de senaste artiklarna baserat på datumen som finns i history.time och Articles.created.

emmisions förslag klagar på "Unknown column 'a.category_id' in 'on clause'"

Medlem sedan aug. 20011 946 inlägg
#4
SELECT DISTINCT DATE_FORMAT( a.created, '%Y-%m-%d' ) AS created, a.headline, c.name, c.id, c.parent_section, a.id AS art_id, h.time AS time
FROM Articles a, History h
LEFT JOIN Categories c ON a.category_id = c.id
WHERE a.id = h.content_id
AND a.category_id <>39
ORDER BY created, time DESC
LIMIT 4

Nu har jag kommit lite längre men får inte riktigt till det. Antar att det är ORDER BY som jag har skrivit fel. Sen vill jag också att det bara ska förekomma en av varje a.id.

Medlem sedan juni 200032 967 inlägg
#5

För att få till sorteringen borde det inte vara värre än att lägga till DESC efter created också, annars sorteras det ascending på created, och descending på time.

Medlem sedan aug. 20011 946 inlägg
#6

Där ser man man lär sig något nytt varje dag. Visste inte att man behövde skriva DESC efter varje. Nu fungerar sorteringen bättre. Problemet med att jag får med alla ändringar kvarstår, jag vill att förekomsten av a.id ska vara unika bland de 4 jag får fram.

Edit: Urvalet blir inte heller helt rätt. Den plockar inte riktigt fram rätt urval utan ajg får bara med de senaste ändringarna i h.time på det senaste datumet i a.created. Se bifogad fil.

sql.JPG
256 ms totalt · 4 externa anrop · v20260731065814-full.c32e866c
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)