SELECT на последен коментар от MySQL

DownFall

Registered
PHP:
		$query = sprintf
		(
			'SELECT
				`%1$scategories`.*,
				(SELECT `p_id` FROM `posts` WHERE `t_id` IN (SELECT `t_id` FROM `topics` WHERE `b_id` = `%1$sboards`.`b_id`) ORDER BY `p_time` DESC LIMIT 1) AS `b_last_post_id`
			FROM
				`%1$scategories`
			LEFT JOIN `%1$sboards` ON `%1$scategories`.`c_id` = `%1$sboards`.`c_id`
			
			WHERE
				`%1$sboards`.`b_id_parent` = :b_id_parent
			ORDER BY
				`%1$scategories`.`c_position` ASC,
				`%1$sboards`.`b_position` ASC',
			$this -> config['MySQL']['prefix']
		);

Заявката обаче е прекалено бавна, може ли да ме посъветвате как да я оптимизирам?
 
Махни вложение селект и джойна, след което цялото го направи на 1 проста заявка като:
[sql]SELECT tablica.*, tablica2.* WHERE tablica.kolona=tablica2.kolona AND tablica.p_time las ORDER BY tablica.kolona ASC[/sql]
 
Пусни 2, и ще върви по-бързо.
Или дай малко от структурата на таблиците, и кажи какви резултати очакваш. От тоя код, освен да те заболят очите, нищо друго няма да стане :S
 
В общи линий, идеята ми е да избера всички категории (categories таблицата), след което за всяка категория по отделно да взема всички прилежащи форуми (join-а в boards таблицата). До тук добре, но искам и да изкарам последната тема във всеки форум (sub select-ите). Сложното става, защото трябва първо да select-на всички теми, които се съдържат в съответния форум (таблица topics) и след това да изкарам тази, която е написана най-скоро (таблица posts, като сортирам по p_time DESC).

Просто цялата врътка ми се вижда прекалено сложна, а и е излишен разход на ресурс. Отделен е въпроса, че ми бави значително и зареждането на страницата.
 
Със сигурност има много елегантни решения, но вложения селект не е из между тях, за съжаление.
Питах те за структурата на таблиците, но направо ще ти стрелна нещо, пък ти си го оправяй тогава :?:
[sql]SELECT b.* , u.*
FROM boards b, users u
WHERE b.id_user = u.id AND b.id_category = 2
ORDER BY b.add_time DESC[/sql]
 

Back
Горе