Помогите с запросом

yeaahhh

Старатель
Регистрация
8 Май 2008
Сообщения
278
Реакции
11
Друзья, очень прошу, подскажите, как построить правильно следующий запрос.
Есть 2 таблицы
dle_want
---------------------
idnews | email
---------------------

и dle_wantcalc
---------------------
idnews | newscalc
---------------------


Необходимо из таблицы dle_wantcalc вывести все записи
и параллельно подсчитать из таблицы dle_want, сколько email с dle_wantcalc.idnews = dle_want.idnews


Делаю вот так
PHP:
$db->query( "SELECT idnews, newscalc FROM dle_wantcalc WHERE newscalc != '0' ORDER BY newscalc DESC" );

	while ( $row = $db->get_row() ) {
$n++;

$sks = $db->super_query( "SELECT COUNT(email) as count FROM dle_want WHERE idnews = '".$row['idnews']."'" );
	$listtv.$n = $sks['count'];

?>
<tr>
							<td style="padding: 2px;" width="150"><?=$n;?></td>
							<td align="left" width="300"><a href="/index.php?newsid=<?=$row['idnews'];?>" target="blank_"><?=$row['tit'];?></a></td>
							<td align="left" width="150"><?=$row['newscalc'];?></td>
<td align="left" width="150"><?=$listtv.$n;?></td>
							<td width="200">
Обнулить
</td>
						</tr>


<? } 
$db->free();

Но обрабатывается только 1 цикл..
Хотя записей в таблице dle_want много..
Помогите, пожалуйста. Заранее огромное спасибо.
 
Если я правильно понял задачу, тут можно обойтись одним запросом join + group by:
HTML:
SELECT n.idnews, n.newscalc, COUNT(e.idnews) FROM dle_want e, dle_wantcalc n WHERE n.idnews=e.idnews GROUP BY e.idnews
Как-то так, полностью на работоспособность не проверял.
 
jami, а как вывести кол-во, полученное в COUNT(e.idnews), не подскажете?
 
jami, а как вывести кол-во, полученное в COUNT(e.idnews), не подскажете?
Не понял вопроса.
Вышеуказанный запрос выведет отдельной колонкой COUNT(e.idnews) - для каждого idnews результат join+группировки (т.е. число email'ов), что и требовалось получить, вроде. Либо формулируйте вопрос точнее :)

ЗЫ. Делать 100500 запросов GROUP BY через php , как в изначальном коде - намного медленее, чем один GROUP BY с JOIN.
 
Проще говоря, необходимо посчитать кол-во email в таблице dle_want, которые имеют idnews из таблицы dle_wantcalc..
 
Код:
SELECT n.idnews, n.newscalc, COUNT(e.idnews) FROM dle_want e inner join dle_wantcalc n  on n.idnews=e.idnews GROUP BY e.idnews
 
мне кажется, что надо бы from заменить
Код:
FROM dle_wantcalc n LEFT JOIN dle_want e
чтобы учесть нули
 
Назад
Сверху