[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод информации из бд циклом
in9emix
Здравствуйте, у меня есть проблема в которой даже не помогли на php.su
Дело в том что у меня есть в бд 2 таблицы. В 1ой таблице есть поля id юзера и id статьи на которую он подписался. Во второй таблице все комментарии которые были оставлены в статьях. Там есть такие поля: id статьи id комментариев и дата.
И мне нужно было вытащить из 2ой таблицы все комментарии в тех статьях на которые подписан юзер.

Я сделал так:

$result3 = mysql_query("SELECT id_статьи FROM reg_article WHERE id_user='$_SESSION[id]'",$db);
$myrow3 = mysql_fetch_array($result3);

if (isset($myrow3['id_user']) == $_SESSION['id']) {
do {
$result4 = mysql_query("SELECT весь_текст FROM articles WHERE id_статьи='$myrow3[id_статьи]",$db);
$myrow4 = mysql_fetch_array($result4);
echo $myrow4['весь_текст'];
} while ($myrow4 = mysql_fetch_array($result4));
}



На php.su мне сказали что у меня не хватает еще одного while и я его сделал. Все комментарии стали выводиться. Ура Ура. Но случилась новая проблема с которой уже мучаюсь не знама сколько. Помогите пожалуйста. Я постараюсь все описать подробно.
И так:

Я вывожу все комментарии добавля в запросе ORDER by datetime DESC. И вот представьте такой картину. Вы подписались на 2 статьи. В каждой предположим появилось по 3 новых сообщения (итого 6).

И рас мы сортируем по дате и времени через DESC, то должны получать всегда сверху только самые новые сообщения, но так как мы подписаны на 2 статьи мы видим эти новые комментарии не сверху а так скажем под этими статьями.

ПЕРВАЯ СТАТЬЯ
3 сообщение
2 сообщение
1 сообщение
ВТОРАЯ СТАТЬЯ
3 сообщение
2 сообщение
1 сообщение

Хотя должны видеть просто:

ПЕРВАЯ СТАТЬЯ
6 сообщение
5 сообщение
4 сообщение
ВТОРАЯ СТАТЬЯ
3 сообщение
2 сообщение
1 сообщение


Но так ничего не выходит и получается как то так: (я уже подписался на 4 статьи).

ЧЕТВЕРТАЯ СТАТЬЯ
3 сообщение
2 сообщение
1 сообщение
ТРЕТЬЯ СТАТЬЯ
3 сообщение
2 сообщение
1 сообщение
ВТОРАЯ СТАТЬЯ
3 сообщение
2 сообщение
1 сообщение
ПЕРВАЯ СТАТЬЯ
3 сообщение
2 сообщение
1 сообщение


А должно так:

12
11
10
9
8
7
6
5
4
3
2
1

А я бы хотел сделать хорошо и удобно, просто что бы выводились самые свежие по дате и времени на верху.

А то они выводятся самые свежие но каждые под своей статьей...и это очень напрягает ...а если юзер подпишется на 10 статей или более....в общем ужас будет. Ребят помогите сделать что бы выводилось нормально( :o



Спустя 18 минут, 25 секунд (4.06.2012 - 15:03) johniek_comp написал(а):
Во-первых, выбросить курсы Попова.
Во-вторых, отредактировать код тэгами
[php][/php]


Спустя 4 минуты, 23 секунды (4.06.2012 - 15:07) Игорь_Vasinsky написал(а):
для двух таблиц есть JOINы в mysql

Спустя 2 минуты, 3 секунды (4.06.2012 - 15:09) rooor написал(а):
не вникал, но что-то мне подсказывает, что это можно сделать одним запросом

Спустя 39 минут, 3 секунды (4.06.2012 - 15:48) in9emix написал(а):
Ребят а через UNION как нибудь можно решить эту задачу? А то с JOIN пока не сталкивался , да и UNION и JOIN особо друг от друга не отличаются вроде...

Кстати на счет уроков Попова...Да, я по ним учусь. Почему его так не любят? Он учит не правильно? А то я сейчас пройду все его курсы а потом окажется что зря...(



Спустя 1 час, 3 минуты, 53 секунды (4.06.2012 - 16:52) Zzepish написал(а):

$result3 = mysql_query("SELECT id_статьи FROM reg_article WHERE id_user='$_SESSION[id]'");
$myrow3 = mysql_fetch_array($result3);

if (isset($myrow3['id_user']) == $_SESSION['id']) {
while ($myrow4 = mysql_fetch_array($result4)){
$result4 = mysql_query("SELECT весь_текст FROM articles WHERE id_статьи='$myrow3[id_статьи]");
$myrow4 = mysql_fetch_array($result4);
echo $myrow4['весь_текст'];
} };

Спустя 1 минута, 56 секунд (4.06.2012 - 16:54) Zzepish написал(а):
in9emix
Не учи по ним код! Учись просто что и куда пихать! Далее учись по профессионалу! намного круче, полезней, и доходчевей. И много нюансов. Я сейчас по ним учусь) еще читаю Котерова и Костараева: "PHP 5 в подлиннике"

Спустя 3 минуты, 22 секунды (4.06.2012 - 16:58) Guest написал(а):
Если видишь запросы к БД в цикле - выкидывай этот "учебник"
Первое что стоит запомнить - никаких запросов в цикле.
Случаи когда такое может пригодиться - один на миллион. И он явно не в начальных задачах

Спустя 12 часов, 15 минут, 52 секунды (5.06.2012 - 05:13) in9emix написал(а):
Игорь_Vasinsky
Огромное вам спасибо, я научился пользоваться JOIN(ами) и все мои проблемы решились разом. Благодарю за совет!

Хороший форум! wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.