|
|
|
| У меня на страницу сайта(в виде таблице HTML) выводится информация о статьях с базы через цикл while.
$result = mysql_query("SELECT * FROM `history` ORDER BY date ",$link);
if(mysql_num_rows($result)>0){
while(($myrow=mysql_fetch_array($result))>0){
Здесь вывод данных из базы в виде таблицы HTML
}
}
|
К дополнению к таблице информации о статьи добавляется число комментариев
Вот так: Комментариев(здесь кол-во комментариев из другой таблицы mysql)
Т-е для каждой статьи свое кол-во комментариев, которые выводятся из другой таблицы mysql(history_comments)
Так вот я для этого засовываю вот этот запрос(что есть наверное нерационально и сильно загружающее)
$sql = "SELECT COUNT(post) FROM history_comments WHERE post = '$myrow[id]'";
$res = mysql_query($sql) or die( mysql_error());
$count22 = mysql_result($res, 0);
|
в цикл который написан выше и получаю для каждой отдельной статьи свое число комментов!
Это сильно нагружает систему тк статей очень много и в цикле подсчитывать для каждой-очень тупо!
Как упростить этот механизм?
Думаю понятно объяснил!
Заметить самое главное хотел-это то что для запроса 2(кол-во) используется идентификатор($myrow[id]) от запроса 1 | |
|
|
|
|
|
|
|
для: oli
(22.09.2008 в 01:04)
| | >Как упростить этот механизм?
Добавьте в таблицу статей столбец, в котором будет храниться количество коментариев.
Если не хотите, то выборку статей можно сделать таким образом:
SELECT `нужные столбцы таблицы history`, COUNT(hc.post) AS `kolvo`
FROM `history`
LEFT JOIN `history_comments` AS `hc` ON `post` = `ID статьи`
GROUP BY `ID статьи`
ORDER BY date
|
| |
|
|
|
|
|
|
|
для: oli
(22.09.2008 в 01:04)
| |
SELECT h.*, cmts
FROM history AS h
LEFT JOIN
(SELECT post, COUNT(post) AS cmts
FROM history_comments
GROUP BY post
) AS r
ON h.id = r.post
ORDER BY `date`
|
Есть хоть малейшая причина поднимать эту тему здесь, а не в разделе MySQL?! | |
|
|
|
|
|
|
|
для: Trianon
(22.09.2008 в 01:52)
| | За неверное расположение темы прошу прошения-не хотел! | |
|
|
|
|
|
|
|
для: OLi
(22.09.2008 в 01:54)
| | Спасибо огромное-Все заработало!
Только вот один момент-если в таблице комментов нет записей-то выводится вот так
Комментариев ()
а надо так Комментариев (0)
Опять что-ли в цикл проверку записей вводить?! | |
|
|
|
|
|
|
|
для: oli
(22.09.2008 в 12:44)
| | Там null возвращается в таких случаях.
Соответственно, не проверка нужна, а преобразование к целому. intval()
Либо учитывать случай null прямо в запросе:
SELECT h.*, COALESCE(cmts, 0) AS cmnts
...
|
| |
|
|
|
|
|
|
|
для: oli
(22.09.2008 в 12:44)
| |
SELECT history.* , IFNULL(COUNT(history_comments.post), 0) AS cmts
FROM history
LEFT JOIN history_comments ON history.id = history_comments.post
GROUP BY history.date DESC
|
как-то так ещё можно | |
|
|
|
|
|
|
|
для: xx77
(22.09.2008 в 14:47)
| | так - нельзя.
Причем, если history.date не является уникальным ключом (а оно однозначно не является) , то так нельзя категорически. | |
|
|
|