webForumDet fria alternativet

Urval i flera tabeller.

5 svar · 427 visningar · startad av dahlgren

dahlgrenMedlem sedan aug. 20011 946 inlägg
#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.

emissionMedlem 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
dahlgrenMedlem 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'"

dahlgrenMedlem 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.

@ndersMedlem sedan juni 200032 969 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.

dahlgrenMedlem 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
127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)