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

Playing

Постоялец
Регистрация
9 Авг 2010
Сообщения
77
Реакции
4
Здравствуйте, никак не могу понять, как реализовать условие "если есть в ячейке (MySQL) запись (допустим "color1" из ячейки в которой "color1,color2,color5").Спасибо.
 
Например регулярно выражаясь sql:
Код:
SELECT *
FROM table1
WHERE color REGEXP 'color1(,|$)'
 
Если у вас есть проблема и вы хотите решить ее с помощью регулярных выражений, значит у вас 2 проблемы.


В данном случае надо решать так:
Код:
select * from table where color like '%color1%';
 
Не совсем понял про 2 проблемы, но есть еще 1 вопрос.

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

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

Можно например написать
Код:
select *
from colors
where color_enabled = 1

а вообще лучше исходную задачу, т.к. чувствуется мы не туда копаем
 
Ну как, задача сделать к бд меньше всего запросов, и взять от туда параметры, цветов просто может быть около 50, так что проверять каждый цвет не вариант... По этому думаю если сделать так чтоб 1 запрос проверил все цвета. Но не знаю как сделать это...)И появилась идея - посылается 1 запрос, который идет по содержимому ячейки, т.е. идет текст с разделителями, он проверяет условия до разделителя, результат да нет. Дальше так же только на том месте где он остановился, и т.д.
 
Тогда все цвета которые нужно найти вставить в запрос, например искать 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)(,|$)'
 
Ну как, задача сделать к бд меньше всего запросов, и взять от туда параметры, цветов просто может быть около 50, так что проверять каждый цвет не вариант... По этому думаю если сделать так чтоб 1 запрос проверил все цвета. Но не знаю как сделать это...)И появилась идея - посылается 1 запрос, который идет по содержимому ячейки, т.е. идет текст с разделителями, он проверяет условия до разделителя, результат да нет. Дальше так же только на том месте где он остановился, и т.д.

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

а вообще лучше исходную задачу, т.к. чувствуется мы не туда копаем
совершенно верно!
 
Понял, спасибо большое. Уже статьи начал читать понял что хорошего от такой оптимизации не будет)
 
Назад
Сверху