Сделал запрос на выборку ответов на комментарии пользователей. Запрос работат, но даже я понимаю, что он мягко говоря говнокодерский((
<?php
$result55 = mysql_query("SELECT * FROM `comments_note` WHERE `id_user` = '{$myrow_user['id']}' and `id_note` NOT IN ( SELECT id FROM `notes` WHERE `id_user` = '{$myrow_user['id']}' )", $db );
$blocks = 0;
$current_unix = time();
while( $myrow55 = mysql_fetch_array( $result55 ) )
{
$blocks++;
?>
<?php
$result555 = mysql_query("SELECT
`comments_note`.*,
`notes`.
`id_user`
FROM
`comments_note`,
`notes`
WHERE
`comments_note`.`parent_id` = '{$myrow55['id']}'
AND
`notes`.`id` = `comments_note`.`id_note`
AND
`comments_note`.`id_user` != '{$myrow55['id_user']}'
AND
`comments_note`.`view_reply` = '1' GROUP BY `comments_note`.`parent_id`", $db );
if (mysql_num_rows($result555) > 0)
{
$myrow555 = mysql_fetch_array($result555);
do {
$m2 = mysql_query("SELECT COUNT(*) FROM comments_note WHERE `parent_id` = '{$myrow55['id']}' and `id_user` != '{$myrow55['id_user']}' and `view_reply` = '1' GROUP BY parent_id");
$m2 = mysql_fetch_array($m2);
$m2 = $m2[0];
$words2=Array("новый ответ", "новых ответа", "новых ответа");
printf ('<div class="note_com_sp">%s - <a href="/note.php?id=%s¬e=%s#comment%s">%s %s</a></div>', $myrow55['comment'], $myrow555['id_user'], $myrow555['id_note'], $myrow55['id'], $m2, num3word($m2,$words2));
}
while ($myrow555 = mysql_fetch_array ($result555));
}
else echo "<h3 class='grey'>ТУТ МОЖНО УВИДЕТЬ СКОЛЬКО ВСЕГО КОММЕНТАРИЕВ У ПОЛЬЗОВАТЕЛЯ И СКОЛЬКО ЗАПРОС ПО КРУГУ ПРОРАБОТАЕТ В ПУСТУЮ</h3>";
?>
<?php
}
if( ! $blocks )
{
?>
<h3 class="grey">Новых ответов на комментарии пока нет.</h3>
<?php
}
?>
структура таблицы такая
id parent_id id_note id_user comment date_add moder view view_reply
43 0 73 291 Красивый стих 2013-07-03 16:34:38 0
42 34 76 11501 Точно-точно2 2013-07-03 15:59:45 0 1 1
41 32 76 11501 Точно-точно! 2013-07-03 15:59:14 0 1 1
40 0 68 291 А вилки нашли?))) 2013-07-02 18:50:37 0 1
39 0 77 291 Молодец Влад 2013-07-02 18:17:48 0 1
Первый запрос выбирает все комментарии который оставлял пользователь (`id_user` = '{$myrow_user['id']}') и выбирает из таблицы с заметками, собственный заметки `id_note` NOT IN ( SELECT id FROM `notes` WHERE `id_user` = '{$myrow_user['id']}' ) для их исключения...
если такие комментарии существуют, то далее в цикле мы имем есть ли в таблице родительные комментарий на комментарий пользователя `comments_note`.`parent_id` = '{$myrow55['id']}', `notes`.`id` = `comments_note`.`id_note`для того что бы вытащить id автора комментария, `comments_note`.`id_user` != '{$myrow55['id_user']}' для того что бы не вытаскивать ответы на свои собственный комментарии, и наконец вытаскиваем не прочитанные ответы на комментарии `comments_note`.`view_reply` = '1'...
если ответов нет, либо они прочитанные, то второй (вложенный запрос) ничего не выведет, а вот первый будет перелапачивать все комментарии пользователя, к примеру 1000 и соответственно 1000 раз проработает цикл!??
Подскажите насколько правильный или нет такой код? Можно ли его оптимизировать... Может кто сможет мне помочь с этим, возможно за вознагрождение?