Archief - Mysql: Join & Limit

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Fr3aK

Legacy Member
Ik heb al wat gegoogled maar kom er niet echt uit... :(

Ik heb dus 2 tabellen:
Code:
tblOne: id, cid, name
tblTwo: id, name
Ik join dus die tweede tabel op tblOne.cid = tblTwo.id, nu zoek ik een manier om maar 20 records per cid op te halen en te sorteren op name, van tblOne welteverstaan.

Alvast bedankt!

Obliv`

Legacy Member
Fr3aK zei:
Ik heb al wat gegoogled maar kom er niet echt uit... :(

Ik heb dus 2 tabellen:
Code:
tblOne: id, cid, name
tblTwo: id, name
Ik join dus die tweede tabel op tblOne.cid = tblTwo.id, nu zoek ik een manier om maar 20 records per cid op te halen en te sorteren op name, van tblOne welteverstaan.

Alvast bedankt!

Ik ken geen mysql, maar zou het zoiets niet kunnen zijn:

SELECT tblOne.id AS id1, tblOne.name AS name1, tblTwo.id AS id2, tblTwo.name AS name2
FROM tblOne INNER JOIN tblTwo on (tblOne.cid = tblTwo.id)
ORDER BY tblOne.Name
LIMIT 0, 20

Fr3aK

Legacy Member
Qua MySQL klopt de query maar het is geen oplossing voor mijn probleem, met die query selecteert hij gewoon de eerste 20 records.

Ik zou graag 20 records per cid selecteren :x

orez

Legacy Member
Fr3aK zei:
Qua MySQL klopt de query maar het is geen oplossing voor mijn probleem, met die query selecteert hij gewoon de eerste 20 records.

Ik zou graag 20 records per cid selecteren :x

Dus alsk het goed voor heb

CID 1 --> 20 Records

CID 2 --> 20 Records

??

Alst da is, moet ge es zoeken op "GROUP BY" :) en de uitleg daarvan lezen, dat zal uw probleem oplossen.

Fr3aK

Legacy Member
Oh boy, dak daar zelf ni ben opgekomen :x

Ik was wat te gefixeerd op LIMIT aan 't zoeken denk ik...

Oplossing:
Code:
SELECT g.name, g.shortname, g.image, c.name AS category
FROM game g
INNER JOIN game_cat c
ON (g.cid = c.id)
WHERE c.location='1'
GROUP BY g.cid
HAVING COUNT(g.id) <= 20
ORDER BY g.cid ASC, g.score / g.votes DESC

Merci orez :)

Fr3aK

Legacy Member
Klopt nog ni, hij laat maar één record per cid zien. Wat zie ik over het hoofd?

passero

Legacy Member
als ge een group by g.cid doet dan is het logisch dat hij 1 record laat zien, dat is juist wat die groep by doet.

Fr3aK

Legacy Member
passero zei:
als ge een group by g.cid doet dan is het logisch dat hij 1 record laat zien, dat is juist wat die groep by doet.
Dat wist ik eigenlijk al maar omdat orez zei dat ge het met group by kunt oplossen heb ik hem die vraag gesteld van "Wat zie ik over het hoofd?".

Ik neem aan dat er wel iemand is die dit probleem al eens is tegengekomen, met 2 nested queries valt het gemakkelijk op de lossen maar ik zou het liever met een join doen...

EDIT: Ik zal 't wel oplossen met nested queries en server side caching.

Rvl

Legacy Member
Dat wist ik eigenlijk al
dat wist ge pas toen ge het hebt uitgevoerd en zag dat het niet werkte ;).

Oplossing is toch simpel, is het te moeilijk om in 1 query te steken, splits het dan op in meerdere query's indien mogelijk of een combinatie van query's en server side scripting taal.
1 query + php volstaat dus om je probleem op te lossen

Legendary d.C.

Legacy Member
laat in uw bovenstaande query eens is de group by wegvallen.

Rvl

Legacy Member
da werkt nog nie hoor;)
btw als ge group by laat vallen moet ge ook having laten vallen

Fr3aK

Legacy Member
Rvl zei:
dat wist ge pas toen ge het hebt uitgevoerd en zag dat het niet werkte ;).

Oplossing is toch simpel, is het te moeilijk om in 1 query te steken, splits het dan op in meerdere query's indien mogelijk of een combinatie van query's en server side scripting taal.
1 query + php volstaat dus om je probleem op te lossen
Ik weet hoe GROUP BY werkt, ik had alleen verwacht dat orez mss een trukje wist om die per 20 te groeperen, maar dat is het punt hier eigenlijk niet.

Hetgeen je zegt, één query en de rest met PHP is niet echt optimaal want ik heb per categorie maar 20 records nodig.
Met één query moet ik dus eerst alles uit de database halen waardoor de records die ik niet nodig heb ook geselecteerd worden.

Nujah met die caching maakt da ni veel uit of ek nested queries gebruik, hij voert die queries enkel uit als er iets nieuw toegevoegd is.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan