Archief - PHP/MySQL: query gezocht

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.

Le Preinz

Legacy Member
Ik zit maar te prullen met een query maar ik krijg niet de gewenste output.

Doel:Dus eigenlijk gewoon een overzicht maken van de laatste 30 topics geordend volgens laatste comments

situatie:
table comments bevat een cel numba die geordend kan worden volgens laatst toegevoegde en een cel numba_in die verwijst naar een bepaalde rij in de proj table
(de topics) table proj: bevat een cel titles


Als iemand mij al wat op weg kan helpen met de query om dit efficient op te roepen?

Col.Kurtz

Legacy Member
Kan je misschien een duidelijker overzicht geven van je database structuur ?

0n3Liner

Legacy Member
ik update gewoon elke keer de topic table, en zet daarin de tijd van de laatste udpate, spaart me enkele queries bij het lsiten van de laatste replies en 1tje meer bij het inserten

Le Preinz

Legacy Member
relevante structuurdelen

table proj
> title (titel van de topic)
> numba (=unieke nummering)

table comments
> numba_in (= verwijzing naar bepaalde topic uit andere tabel)
> numba (=unieke nummering )

De titles uit proj volgens laatste comments otdenen, zoals dit forum dus.

servi

Legacy Member
SELECT * FROM proj p
JOIN comments c ON c.numba_in = p.numba
ORDER BY c.numba DESC LIMIT 30


maar ik zou u wel aanraden om wat deftigere kolomnamen te kiezen wat zo gaat ge in de war geraken.

Le Preinz

Legacy Member
Merci al, ik weet het van die kolomnamen :(

Moet er niet 1 of andere manier een beperking opgezet worden zodat topics niet 2 maal vermeld worden als er bij laatste 30 comments 2 maal gereageerd is op de laatste comment?

edit:
Hoe echo ik nu bijvoorbeeld nu de title van een topic?
$row[p.title];

maT'

Legacy Member
echo: $row[title];

Met het "distinct" keyword kan je nog oplossen wat jij wil bereiken (geen dubbele topics), geen idee of het werkt als er een join wordt gebruikt. (test dit even of doorzoek mysql.org )

SELECT DISTINCT * FROM proj p
JOIN comments c ON c.numba_in = p.numba
ORDER BY c.numba DESC LIMIT 30

Le Preinz

Legacy Member
maT' zei:
echo: $row[title];

Met het "distinct" keyword kan je nog oplossen wat jij wil bereiken (geen dubbele topics), geen idee of het werkt als er een join wordt gebruikt. (test dit even of doorzoek mysql.org )

SELECT DISTINCT * FROM proj p
JOIN comments c ON c.numba_in = p.numba
ORDER BY c.numba DESC LIMIT 30

Na beetje opzoeken en testen zou ik blijkbaar geen gebruik moeten maken van die DISTINCT maar van GROUP BY.
Ik heb nu:
PHP:
$sql = "SELECT * FROM proj p JOIN comments c GROUP BY c.numba_in ON c.numba_in = p.numba  WHERE p.cat='$catnr' ORDER BY c.numba DESC LIMIT 30";
maar dit geeft foutmelding dat de syntax niet klopt. Heb die GROUP BY al zowat overal gezet, net zoals DISTINCT maar telkens syntaxerror. Maar ben er bijna nu. Merci alvast.

edit:

PHP:
$sql = "SELECT * FROM proj p JOIN comments c ON c.numba_in = p.numba  WHERE p.cat='$catnr' GROUP BY p.numba ORDER BY c.numba DESC LIMIT 30";

het werkt! merci

servi

Legacy Member
euh juist wel, DISTINCT is bedoeld om dubbele rijen te vermijden (uiteraard moet je dan niet zomaar blindelings SELECT * gebruiken), GROUP BY is voor andere reden bedoeld.

Le Preinz

Legacy Member
hoe moet ik het dan beter doen?

Die SELECT * vervangen door de collum namen die ik nodig heb en dan alsnog die DISTINCT erin steken.?

servi

Legacy Member
inderdaad zo moet het.

( is trouwens performanter dan * te gebruiken )
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