SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.04.2012 14:42:22

stive
Участник
Зарегистрирован: 11.09.2011
Сообщений: 11

Запрос и цикл foreach

Здравствуйте, помогите решить проблему.
Вобщем вот сам запрос

SELECT news.*, comments.news, comments.index, comments.date FROM news JOIN comments ON news.id=comments.news and comments.index='yes' ORDER BY comments.date DESC LIMIT 10

Все выводит, но выводит только одну запись из одной новости, в одной новости имеется 3 коммента, а выводится лишь последний.
Беру делаю следующее, составляю запрос так
SELECT * FROM news JOIN comments ON news.id=comments.news and comments.index='yes' ORDER BY comments.date DESC LIMIT 10

так выводиться все правильно, показывает то что нужно, но вот беда в том что news.id заменяется comments.id.
Как быть? И почему не правильно? Подскажите.

Неактивен

 

#2 01.04.2012 14:59:42

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Запрос и цикл foreach

В последней версии запросa Вы выводите все поля из обеих таблиц - стоит выводить только те поля, которые нужны.
Попробуйте, например, вот так (выводим все из new и id, news, index и date из comments).

SELECT n.*, c.id, c.news, c.index, c.date FROM news n JOIN comments c ON n.id=c.news and c.index='yes' ORDER BY c.date DESC LIMIT 10

n - это news, c- comments, неиспользуемые поля лучше убрать из SELECT.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 01.04.2012 15:19:28

stive
Участник
Зарегистрирован: 11.09.2011
Сообщений: 11

Re: Запрос и цикл foreach

Да, это помогает, но не так как нужно. Беда в том что news.id формирует ссылку на новости, ну т.е.
/5-news/
а так получается что вместо айди новости, в урл прописывается айди коммента

Неактивен

 

#4 01.04.2012 15:31:19

stive
Участник
Зарегистрирован: 11.09.2011
Сообщений: 11

Re: Запрос и цикл foreach

Видно что  то я мудрю, вот еще более простой пример и опять же выводит только последний комментарий
Показываю сразу с кодом, может накодил что то не так

function return_comments($id) {
            $sql = "SELECT * FROM comments WHERE `news` = {$id} and `index` = 'yes'";
                $res = $this->sql($sql) ;
                $result = array();
                 while($row = mysql_fetch_array($res)) {
                  $result[$row['id']] = $row ;  
                  }
            return $result ;
                     
        }

 function comments($id) {
            $result = $this->return_comments($id) ;
            $out = "" ;
            if($result != 0 ) {
            foreach($result as $key => $value) {
                $out = "<div class=\"comments\">
                    <div class=\"autor\"><b>{$value['login']}</b> ({$value['date']})</div>
                        <div class=\"text\">
                            {$value['story']}
                        </div>
                    </div>"
;
                    }
               
          }
          return $out ;    
       }
 

Должен в полной новости выводить все комменты, в поле comments.news который содержится news.id новости
А получается что цикл как бы перезаписывает комменты и выводит последний

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson