sneax
Legacy Member
Ik wist tot voor kort nog niet van JOIN in SQL, dankzij die post die hier een tijdje geleden stond dus wel, en ik ben er vandaag ff mee bezig geweest om de 98 queries op de main page van Ravengames.com te verminderen naar véél minder hehe 
Nu, vroeger queryiede ik cat_type, om daar te selecteren welke news_id's ik moest hebben, en dan pér news_id ging ik met nóg een query de data van die newspost ophalen.
Als ik dus 100 newsposts zou laten zien heb ik 101 queries. Met JOIN moet dit niet. Maar nu is het probleem eenvoudig weg dat het met een join 44secs duurt tot de query voldaan is (zelfs met LIMIT 20 ) en dat de 98 queries op de main page nu maar een fractie van een seconde duurt.
Wat moet ik dan doen? Dbase design zélf is eigenlijk wél goed dus daar moet ge het ni op steken, ik kan het alleen ni optimaal benutten blijkbaar.
De twee situaties in de praktijk:
- NU (98 queries):
Eerst
SELECT type_id FROM cat_type WHERE type = 'news' AND ( cat_type.cat_id = '2' OR cat_type.cat_id = '3' OR (...) ) ORDER BY type_id DESC LIMIT 20
-> stel u bij (...) nen hoop OR cat_id = 'x' voor, daar selecteer ik de categorieën
Nadien doe ik voor élke gevonden type_id (dus alle newsposts die in één van die categorieën) zitten nog een keer een query om de eigenlijke data van die newspost te vinden.
- MET JOIN (1 query)
SELECT news.* FROM news LEFT JOIN cat_type ON ( news.id = cat_type.type_id ) AND cat_type.type = 'news' AND (cat_type.cat_id = '1' OR (...)) ORDER BY news.date DESC LIMIT 20
Het verschil is dat ik hier ORDER doe op datum (aangezien dat aanvankelijk ook de bedoeling was, maar niet mogelijk als je verschillende queries gebruikt).
Het verschil tss LEFT JOIN, INNER JOIN, RIGHT JOIN etc... weetek wel ni mss ligt het daaraan?
Waarom het niet zo 'eenvoudig' is, is omdat ik newsposts (en andere 'items' zoals pages en images) in verschillende categorieën wil kunnen steken. Anders zou ge uiteraard gewoon up cat_id veld in uw news table kunnen steken.
Wat ik mij kan voorstellen waardoor het foutloopt is dat mijn news_id's in de table news wel uniek zijn maar mijn 'type_id' in de table cat_type is dat dus niet (aangezien er meerdere categorieen per newspost kunnen zijn).

Nu, vroeger queryiede ik cat_type, om daar te selecteren welke news_id's ik moest hebben, en dan pér news_id ging ik met nóg een query de data van die newspost ophalen.
Als ik dus 100 newsposts zou laten zien heb ik 101 queries. Met JOIN moet dit niet. Maar nu is het probleem eenvoudig weg dat het met een join 44secs duurt tot de query voldaan is (zelfs met LIMIT 20 ) en dat de 98 queries op de main page nu maar een fractie van een seconde duurt.
Wat moet ik dan doen? Dbase design zélf is eigenlijk wél goed dus daar moet ge het ni op steken, ik kan het alleen ni optimaal benutten blijkbaar.
De twee situaties in de praktijk:
- NU (98 queries):
Eerst
SELECT type_id FROM cat_type WHERE type = 'news' AND ( cat_type.cat_id = '2' OR cat_type.cat_id = '3' OR (...) ) ORDER BY type_id DESC LIMIT 20
-> stel u bij (...) nen hoop OR cat_id = 'x' voor, daar selecteer ik de categorieën
Nadien doe ik voor élke gevonden type_id (dus alle newsposts die in één van die categorieën) zitten nog een keer een query om de eigenlijke data van die newspost te vinden.
- MET JOIN (1 query)
SELECT news.* FROM news LEFT JOIN cat_type ON ( news.id = cat_type.type_id ) AND cat_type.type = 'news' AND (cat_type.cat_id = '1' OR (...)) ORDER BY news.date DESC LIMIT 20
Het verschil is dat ik hier ORDER doe op datum (aangezien dat aanvankelijk ook de bedoeling was, maar niet mogelijk als je verschillende queries gebruikt).
Het verschil tss LEFT JOIN, INNER JOIN, RIGHT JOIN etc... weetek wel ni mss ligt het daaraan?
Waarom het niet zo 'eenvoudig' is, is omdat ik newsposts (en andere 'items' zoals pages en images) in verschillende categorieën wil kunnen steken. Anders zou ge uiteraard gewoon up cat_id veld in uw news table kunnen steken.
Wat ik mij kan voorstellen waardoor het foutloopt is dat mijn news_id's in de table news wel uniek zijn maar mijn 'type_id' in de table cat_type is dat dus niet (aangezien er meerdere categorieen per newspost kunnen zijn).
. (zoals ik zei: INNER is dus zowat gelijk aan , seperator)