Помогите составить запрос mysql.

Тема в разделе "Базы данных", создана пользователем swer, 10 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. swer

    swer

    Регистр.:
    15 июн 2008
    Сообщения:
    305
    Симпатии:
    38
    Есть вот такой запрос
    PHP:
    $sql "SELECT id, name, description from site where id IN
    (SELECT uid FROM `tags` WHERE `tag` LIKE '"
    .$tag."%')";
    который получает данные сайтов с тегами которые были введены.Все работает отлично, но выводит по дефолту,те по ид (от меньшего к большему),а мне надо по релевантности и я добавил ORDER BY tag
    PHP:
    $sql "SELECT id, name, description from site where id IN
    (SELECT uid FROM `tags` WHERE `tag` LIKE '"
    .$tag."%' ORDER BY tag )";
    но как оказалось IN не принимает в значение последовательность передаваемых uid и тем самым выводит как и прежде.
    Вопрос. как построит запрос что бы вывел так как мне надо без использования циклов(а значит кучу запросов) , а с 1 но сложным запросом.
     
  2. alfaexpert

    alfaexpert

    Регистр.:
    23 июл 2008
    Сообщения:
    183
    Симпатии:
    27
    Если не ошибаюсь то конструкция Order by позволяет сортировать по нескольким полям сразу попробуй вот такую вот конструкцию
    PHP:
    $sql "SELECT id, name, description from site where id IN 
    (SELECT uid FROM `tags` WHERE `tag` LIKE '"
    .$tag."%' ORDER BY tag,name,description )"
    Через запятую указывай поля по которым сортировать данные плюс не забывай про параметры ASC и DESC
     
  3. BlackPawn

    BlackPawn Постоялец

    Регистр.:
    19 мар 2009
    Сообщения:
    75
    Симпатии:
    27
    Сортировка во внутреннем подзапросе ничего не даст. ORDER BY должно стоять в основном запросе. Попробуй вместо подзапроса испольховать JOIN.
    PHP:
    $sql="SELECT t1.id, t1.name, t1.description from site as t1
    INNER JOIN tag as t2 on t1.id=t2.uid
    WHERE t2.tag LIKE '"
    .$tag."%')
    ORDER BY t2.tag"
    ;
     
    swer нравится это.
  4. swer

    swer

    Регистр.:
    15 июн 2008
    Сообщения:
    305
    Симпатии:
    38
    Спасибо, хот и немного с ошибкой-лишняя ")" но все работает отлично.:)
     
Статус темы:
Закрыта.