Page 1 of 1

Database selectie vraag

Posted: Sun Dec 04, 2011 8:54 am
by Gregor
Hallo,

Ik probeer artikelen te selecteren die tot een bepaalde categorie behoren, echter de verbinding tussen het artikel en de categorie is in een aparte tabel gedaan.

Tabel CGBlog `cms_module_cgblog`
`cgblog_id`, `cgblog_title`, `cgblog_data`, `cgblog_date`, `summary`, `start_time`, `end_time`, `status`, `create_date`, `modified_date`, `author`, `cgblog_extra`, `url`
Tabel CGBllog <-> Category `cms_module_cgblog_blog_categories`
`blog_id`, `category_id`
Het selectstatement voor het selecteren van het vorige en volgende artikel binnen dezelfde categorie:
// get all CGBlog articles sorted by ascending date
$query_next = "SELECT cgblog_id, cgblog_title FROM ".cms_db_prefix()."module_cgblog WHERE cgblog_date > ? AND status = 'published' AND (end_time >= CURRENT_DATE OR end_time IS NULL) AND cgblog_id IN (SELECT blog_id FROM ".cms_db_prefix()."module_cgblog_blog_categories) ORDER BY cgblog_date ASC LIMIT 1";

// INNER JOIN ".cms_db_prefix()."module_cgblog_blog_categories ON cgblog_id = blog_id
// AND cgblog_id IN (SELECT blog_id FROM ".cms_db_prefix()."module_cgblog_blog_categories)

$query_prev = "SELECT cgblog_id, cgblog_title FROM ".cms_db_prefix()."module_cgblog WHERE cgblog_date < ? AND status = 'published' AND (end_time >= CURRENT_DATE OR end_time IS NULL) AND cgblog_id IN (SELECT blog_id FROM ".cms_db_prefix()."module_cgblog_blog_categories) ORDER BY cgblog_date DESC LIMIT 1";

// AND cgblog_id IN (SELECT blog_id FROM ".cms_db_prefix()."module_cgblog_blog_categories)
// INNER JOIN ".cms_db_prefix()."module_cgblog_blog_categories ON cgblog_id = blog_id
In de commentaarregels bij het select-statement staan de opties die k heb geprobeerd, maar helaas zonder resultaat.

Ik ben bijv. ook nieuwsgierig wat nu het resultaat is van de query, maar ik weet het commando voor het weergeven van een array niet :-\

Wie kan me op weg helpen om dit werkend te krijgen?

Thanks, Gregor

Re: Database selectie vraag

Posted: Mon Dec 05, 2011 1:29 pm
by Gregor
De code zou volgens mij als volgt moeten zijn:

Code: Select all

// get all CGBlog articles sorted by ascending date (NEXT)
$query_next = "SELECT cgblog_id, cgblog_title 
FROM ".cms_db_prefix()."module_cgblog 
WHERE cgblog_date > ?
AND status = 'published'
AND (end_time >= CURRENT_DATE OR end_time IS NULL) 
AND cgblog_id 
IN (SELECT blog_id FROM ".cms_db_prefix()."module_cgblog_blog_categories) 
ORDER BY cgblog_date 
ASC LIMIT 1";

// get all CGBlog articles sorted by ascending date (PREV)
$query_prev = "SELECT cgblog_id, cgblog_title 
FROM ".cms_db_prefix()."module_cgblog 
WHERE cgblog_date < ?
AND status = 'published'
AND (end_time >= CURRENT_DATE OR end_time IS NULL) 
AND cgblog_id 
IN (SELECT blog_id FROM ".cms_db_prefix()."module_cgblog_blog_categories) 
ORDER BY cgblog_date 
ASC LIMIT 1";
Op deze link is bijna onderaan de pagina (Vorig | Volgend --> ontbreekt) te zien dat het niet naar behoren werkt:
http://www.uisge-beatha.eu/logboek/272/ ... nzelf.html
Het volgende / vorige bericht zou ook in de categorie 'Hardlopen' moeten zijn, echter het geeft een bericht terug in de categorie 'Zeilen'.

Bij http://www.uisge-beatha.eu/logboek/255/ ... steek.html wijst 'Volgend' naar het allereerste bericht en 'Vorig' wijst wel naar het juiste bericht.

Iemand die kan helpen om dit stukje ook werkend te krijgen?

Gregor