За последние 24 часа нас посетили 19439 программистов и 1606 роботов. Сейчас ищут 872 программиста ...

Выборка по условию из БД, если значения через разделитель

Тема в разделе "PHP для новичков", создана пользователем LAlexS, 1 сен 2014.

  1. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Есть ячейка в БД 'cat' где данные с разделителем "1,12,144"
    Мне надо сделать выборку:
    Код (Text):
    1. $cat = 1;
    2. mysql_query ("SELECT * FROM table WHERE cat=$cat");
    LIKE не пойдет, потому что "1" есть во всех трех числах
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Выборка по условию из БД, если значения через разделител

    WHERE `cat` IN (1, 3, 5, 7, 11)
     
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    связь один ко многим делается нетак

    а теперь только боль - типа
    Код (PHP):
    1. SELECT * FROM table 
    2. WHERE cat LIKE '1' 
    3.  OR cat LIKE '1,%' 
    4.  OR cat LIKE '%,1'
    5.  OR cat LIKE '%,1,%' 
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Re: Выборка по условию из БД, если значения через разделител

    во-первых, хранить данные в таком виде это срань господня! это НЕ по реляционному :) формат годится для быстрого вывода, но не для поиска!!!

    во-вторых, специально для шаловливых чудаков в майсиквеле есть функция FIND_IN_SET(). встроенные функции как правило быстрее и надежнее, чем какие-то сложные выражения.
     
  5. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Re: Выборка по условию из БД, если значения через разделител

    А как хранить, если мне надо конкретный продукт по нескольким категориям привязать?
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: Выборка по условию из БД, если значения через разделител

    отдельная таблица связей

    id_product,id_category
     
  7. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Re: Выборка по условию из БД, если значения через разделител

    Он в этом случае, почему-то только первое значение из множества видит
    Код (Text):
    1. WHERE cat IN ('$cat')
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Re: Выборка по условию из БД, если значения через разделител

    Дык, елы-палы ))) Ты видишь разницу между списком значений и строкой?
     
  9. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Re: Выборка по условию из БД, если значения через разделител

    До сего момента, думал, что да

    Добавлено спустя 19 минут 52 секунды:
    Re: Выборка по условию из БД, если значения через разделитель
    Да, что не так с этим WHERE IN?
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Выборка по условию из БД, если значения через разделител

    чувак, если у тебя в $cat они идут через запятую, как у меня, то и пиши без кавычек, как я
     
  11. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Re: Выборка по условию из БД, если значения через разделител

    В $cat нету запятой, там значение, которое надо найти в строке cat в БД, где как раз и через запятую
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Выборка по условию из БД, если значения через разделител

    а, тогда я тебя не понял, прости
    это не один ко многим. это капец. =)

    один ко многим это когда у тебя есть таблица с полями "кто" и "к кому". и всё. и по ней строятся выборки.
     
  13. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Re: Выборка по условию из БД, если значения через разделител

    Что неправильно в таком случае?
    Код (Text):
    1. WHERE FIND_IN_SET ('$cat', cat)
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Re: Выборка по условию из БД, если значения через разделител

    так вроде норм. ты просто попробуй. если есть сомнения — читай доку.

    "не так" тут не синтаксис, а сам подход. это выражение НЕ будет использовать индекс, оно полюбому будет перебирать все строки. и если строк много, то будут тормоза.
     
  15. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Re: Выборка по условию из БД, если значения через разделител

    Лайки, лайки, лайки, целая чукотская упряжка.
    Немножко уменьшить количество боли можно так:
    where ','+cat+',' like '%,1,%'
    А вообще согласен - не дело так писать.
     
  16. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Re: Выборка по условию из БД, если значения через разделител

    Да, я уже понял, что сам себя в тупик загнал, тем более у меня из-за этого дальше логика ломаться начала.
    Буду переписывать.
    Всем спасибо, за участие!