Помогите с sql запросом

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

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

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Не знаю как правильно сделать. В таблице saloni есть поле marka(varchar), в нем находится значение
    Код:
    123,654,12,1,2,78
    У меня есть GET параметр marka - значиние int (т.е. числовое значение).

    Нужно из таблицы saloni выбрать все записи, где $_GET['marka'] есть хотя бы в одном поле "marka".

    Вижу это так:

    Код:
    select * from saloni where marka like 
    и тут должно быть правило, которое выберет значение из поля, у которого спереди и сзади нету числового значения. Т.е. может быть пустой символ или запятая.
     
  2. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Не очень понятно, что надо, но на первый взгляд база денормализована и должна быть дополнительная таблица связей салон->марка из которой и нужно делать выборку
     
  3. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    что не понятного? У меня есть такая свзять, но id марок в таблице saloni лежат через запятую. Вот здесь и нужно выбрать записи, в поле marka которых есть этот GET параметр
     
  4. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Все понял. Нужна отдельная таблица. Но если она невозможна, то надо смотреть в сторону
    SELECT ... REGEXP
    И регулярку подобную (?:^|,)число(?:,|$)

    не могу проверить. Машина глючит.
     
  5. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    решил таким сопособ
    Код:
       select * from saloni where marka like '123,%' or marka like '%,123' or marka like '%,123,%' or marka = '123'
     
  6. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    Если через запятую то вот запрос

    PHP:
    SELECT FROM table WHERE marka regexp '[[:<:]](" $_GET['marka']  ")[[:>:]]'
    Единственное что с кавычками поиграйте, не помню какие где ставить...

    ПС Мой запрос будет работать на много быстрее чем ваш...
     
    rasandrey нравится это.
  7. Mr.Emm

    Mr.Emm Постоялец

    Регистр.:
    5 май 2008
    Сообщения:
    147
    Симпатии:
    111
    Имеет смысл хранить список в таком виде: ,123,654,12,1,2,78, и ограничиться одним условием " LIKE '%,".$_GET['marka'].",%'" будет быстрее чем regexp.
     
  8. lbarmen

    lbarmen Создатель

    Регистр.:
    11 апр 2010
    Сообщения:
    48
    Симпатии:
    6
    Нету необходимых постов, по этому пишу в похожей теме.

    Есть таблица comments
    в каждой строке есть rating, со значениями 1, 2, 7, -1, -6 и так далее

    нужно общее число рейтинга со всех записей. То есть общая сумма - 1+2+7-1-6=3 (только там значений больше :D )

    Вот что я пробовал

    PHP:
    $db->query("select count(distinct rating) from comments WHERE user_id=1");
    но выводит какой то бред :bc:
     
  9. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    Говорю по личному опыту, если проект у вас хоть не много посещаемый, то получите огромную нагрузку на базу данных, есть смысл хранить рейтинг пользователя в базе и менять его при изменении рейтинга новости
     
  10. skyfay

    skyfay Создатель

    Регистр.:
    18 сен 2009
    Сообщения:
    14
    Симпатии:
    6
    подскажите пожалуйста, в разных скриптах при составлении SQL запроса название таблицы, столбца и сами значения заносятся в кавычки '' или ``, а в некоторых вообще не указываются. Для чего это нужно и влияет ли как то на безопасность? спасибо.