PHP+Mysql, проверка на часть записи в ячейке

Тема в разделе "PHP", создана пользователем Playing, 22 авг 2011.

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

    Playing Постоялец

    Регистр.:
    9 авг 2010
    Сообщения:
    77
    Симпатии:
    4
    Здравствуйте, никак не могу понять, как реализовать условие "если есть в ячейке (MySQL) запись (допустим "color1" из ячейки в которой "color1,color2,color5").Спасибо.
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Например регулярно выражаясь sql:
    Код:
    SELECT *
    FROM table1
    WHERE color REGEXP 'color1(,|$)'
    
     
  3. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    Если у вас есть проблема и вы хотите решить ее с помощью регулярных выражений, значит у вас 2 проблемы.


    В данном случае надо решать так:
    Код:
    select * from table where color like '%color1%';
     
  4. Playing

    Playing Постоялец

    Регистр.:
    9 авг 2010
    Сообщения:
    77
    Симпатии:
    4
    Не совсем понял про 2 проблемы, но есть еще 1 вопрос.

    Ячейка если идет "y,y,y,n,y,y,n", т.е. да нет, можно ли чтоб запрос "пробегал" до разделителя (т.е. ",")?Т.е. вместо того чтоб посылать по каждому цвету по запросу, послать 1 на все цвета (ну т.е. есть они или нет)
     
  5. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    это шутка такая.

    Не совсем понятно, что хочется получить.

    Можно например написать
    Код:
    select *
    from colors
    where color_enabled = 1
    а вообще лучше исходную задачу, т.к. чувствуется мы не туда копаем
     
  6. Playing

    Playing Постоялец

    Регистр.:
    9 авг 2010
    Сообщения:
    77
    Симпатии:
    4
    Ну как, задача сделать к бд меньше всего запросов, и взять от туда параметры, цветов просто может быть около 50, так что проверять каждый цвет не вариант... По этому думаю если сделать так чтоб 1 запрос проверил все цвета. Но не знаю как сделать это...)И появилась идея - посылается 1 запрос, который идет по содержимому ячейки, т.е. идет текст с разделителями, он проверяет условия до разделителя, результат да нет. Дальше так же только на том месте где он остановился, и т.д.
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Тогда все цвета которые нужно найти вставить в запрос, например искать color1 или color4 тогда:
    Код:
    SELECT * 
    FROM table1 
    WHERE 
    color LIKE '%color1,%' OR color LIKE '%color1'
    OR 
    color LIKE '%color4,%' OR color LIKE '%color4'
    
    сгенерировать такой запрос с php или другой вариант запроса
    Код:
    SELECT * 
    FROM table1 
    WHERE color REGEXP '(color1|color4)(,|$)'
    
     
  8. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    я говорю о том, почему у тебя в одной ячейке такое хранение данных? С одной стороны ты пытаешься оптимизировать запрос, а с другой у тебя провал в архитектуре.
     
    Playing нравится это.
  9. Рачей

    Рачей

    Регистр.:
    10 фев 2009
    Сообщения:
    194
    Симпатии:
    6
    а что мешает сделать 5 ячеек и выбрать их одним запросом?:)) вы еще все данные базы в одну ячейку засуньте и потом выискивайте их там... у MySQLa много вариантов соединения ячеек и выборки по ним...

    совершенно верно!
     
  10. Playing

    Playing Постоялец

    Регистр.:
    9 авг 2010
    Сообщения:
    77
    Симпатии:
    4
    Понял, спасибо большое. Уже статьи начал читать понял что хорошего от такой оптимизации не будет)