SELECT ... WHERE

Тема в разделе "Базы данных", создана пользователем yeaahhh, 17 сен 2011.

Модераторы: latteo
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья, хочу у пользователя вывести все сообщения его друзей.
    Получаю в цикле id друзей и засовываю в переменную для запроса.
    PHP:
    $vsevse .= " idpoluchatel='".$mypod['id_friend']."' AND";
    Далее переменную $vsevse подставляю в запрос.

    PHP:
    mysql_query("SELECT *
                FROM mess WHERE "
    .$vsevse." veranon != '2'
                ORDER BY date DESC LIMIT 0, 5"
    )
    И ничего не выводится..
    Пробовал AND, OR, LIKE..
    Если у тебя в друзьях 1 пользователь, то все его сообщения выводятся исправно..
    Подскажите, плиз, что не так в запросе к БД?
    Заранее спасибо
     
  2. Parviz555

    Parviz555

    Регистр.:
    29 янв 2009
    Сообщения:
    160
    Симпатии:
    38
    Цикл должен быть в формате IN(id_друзей через запятую)

    Пример:
    mysql_query("SELECT * FROM mess WHERE idpoluchatel IN(2,3,10,12) AND veranon != '2' ORDER BY date DESC LIMIT 0, 5")
     
    yeaahhh нравится это.
  3. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    Пробуйте так:
    PHP:
    <?php
    $poluchatels 
    = array();
    for(;;) {
        
    $poluchatels[] = (int)$mypod['id_friend'];
    }
    if (
    sizeof($poluchatels) > 0) {
        
    mysql_query("SELECT * 
                    FROM mess 
                    WHERE idpoluchatrel IN (" 
    implode(","$poluchatels) . ") 
                    AND veranon != '2' 
                    ORDER BY date DESC LIMIT 0, 5"
    )
    }
    ?>
     
    yeaahhh нравится это.
  4. wal

    wal Постоялец

    Регистр.:
    24 мар 2008
    Сообщения:
    89
    Симпатии:
    30
    если ИД друзей выбираются из базы, то оптимальнее сделать запрос с подзапросом:

    SELECT * FROM mess WHERE idpoluchatel IN(select id_druga from druzya ...) AND veranon != '2' ORDER BY date DESC LIMIT 0, 5