Переделать запрос с LEFT JOIN

usascha

Новичок
Переделать запрос с LEFT JOIN

Здравствуте, все.

Вот есть запрос:
PHP:
SELECT COUNT(article_id), m.magazine_name
	FROM article AS a, magazine AS m
		LEFT JOIN section AS s ON a.section_id=s.section_id 
		AND s.magazine_id = m.magazine_id
	WHERE s.magazine_id=4
	GROUP BY m.magazine_name
Он выдает нужное: название журнала и количество статей из него в базе.

Пытаюсь переделать его так, чтобы одним запросом можно было получать такие же данные по еще 4-м журналам.

Подскажите, как это сделать.
 

Dim

Новичок
мот поможет WHERE s.magazine_id IN (i,j,m,n), где i,j,m,n наши номера журналов, по которым смотреть кол-во статей ?
 

zerkms

TDD infected
Команда форума
usascha
переделай запись

FROM article AS a, magazine AS m
LEFT JOIN section AS s ON a.section_id=s.section_id
AND s.magazine_id = m.magazine_id

в явный вид с INNER JOIN + ON, а то хз как mysql производит первое объединение таблиц. а без EXPLAIN предполагать сложно
 

usascha

Новичок
Често говоря, я никогда не умел пользоваться Explain'ом, но получить его могу:
Код:
table  	 type  	 possible_keys   key  	 key_len   ref   	rows  	 Extra
a 	ALL 	NULL 		NULL 	NULL 	NULL 		1257 	Using temporary; Using filesort
m 	ALL 	NULL 		NULL 	NULL 	NULL 		6 	 
s 	eq_ref 	PRIMARY 	PRIMARY 4 	a.section_id 	1 	Using where
 

zerkms

TDD infected
Команда форума
1. оформил бы его в code
2. посмотри в соответствующий раздел мануала и сделай чтобы при 1 и (если получится) 2 объединении использовались индексы
dev.mysql.com/doc/refman/4.1/en/explain.html
тем более что там есть пример оптимизации структуры
 

vovik

Новичок
Исходный запрос не слишком здорово выглядит. Декартово произведение article и magazine без наложения условия - не самый производительный путь :)

Поле article_id в таблице article находится ? Исхожу из этого. Тогда исходный запрос выглядел бы так.

PHP:
SELECT COUNT(a.article_id), m.magazine_name
FROM magazine AS m
    LEFT JOIN section AS s ON (s.magazine_id = m.magazine_id)
    LEFT JOIN article AS a ON (a.section_id = s.section_id)
WHERE m.magazine_id = 4
GROUP BY m.magazine_name
Ну а теперь если надо для нескольких журналов - просто вместо =4 написать IN (4,5,6,7).
 
Сверху