Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Имеется столбец color , в которым хранятся значения параметра, разделённых через разделитель(","). И, например, несколько строк: 'красный' 'красный,жёлтый' 'красный,жёлтый,зелёный' 'жёлтый,зелёный' 'зелёный' и т.д. Возможные комбинации задаются через HTML-форму select с multichoice, т.е. пользователь может выбрать много вариантов. Вопрос: Как отфильтровать те строки, где есть только зелёный; или только зелёный и жёлтый; или красный и жёлтый? Я пробовал FIND_IN_SET, но, например, запрос Код: sql 1. вернёт строки, где встречается 'зелёный'(здесь их 3 штуки), а нужно только одну, последнюю. Пожалуйста, помогите, решить задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 18:54 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
dmaytry79 Как отфильтровать те строки, где есть только зелёный; Например, так: 1) удваиваем все запятые 2) добавляем по одной запятой в начале и в конце 3) заменяем литерал ',зелёный,' на пустую строку 4) отбираем те записи, где после всех действий осталась пустая строка PS. Не вздумай так делать на самом деле... лучше займись нормализацией передаваемых от юзера данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 19:47 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
Это значит, менять структуру, я правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 20:00 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
Нет, неправильно, менять нужно технологию. И подход. Между пользователем и MySQL-сервером есть посредники. Полагаю, минимум два. Это веб-сервер и PHP-сервер. От веб-сервера интеллекта ожидать трудно, а вот PHP (ну или какой там у тебя скрипт-интертрепатор) вполне мог бы пережевать список слов во вменяемый формализованный список, а ещё лучше в нормализованный набор данных во временной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 20:37 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
Не совсем понятно. От клиента(HTML-форма) через POST отправляется массив значений параметра(покажи мне товары чёрного, белого, серого цветов) на PHP-сервер. Есть таблица товаров с полем `color`, в котором через запятую перечислены возможные комбинации из 10 цветов. Как выбрать нужные товары? Мне с помощью PHP нужно создать запрос. Что значит "формализованный список" и " нормализованный набор данных "? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 22:25 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
dmaytry79Мне с помощью PHP нужно создать запрос.Нет вменяемого способа сравнивать несортированные CSV. Конвертируй список своих цветов в подзапрос, который получает каждый отдельный цвет в запись. Связывай этот подзапрос с основной таблицей по вхождению подстроки и сравнивай COUNT(*) и COUNT(color = @color). Для случая, когда все цвета имеются, и нет лишних, полученные количества должны быть равны. dmaytry79Что значит "формализованный список" и " нормализованный набор данных "?Список в CSV ненормализован. Нормализация в данном случае - это конвертация CSV в набор записей. Как поля color в таблице, так и набора параметров фильтра. Формализация возможна в случае, когда цветам соответствуют словарные коды, при этом сами искомые цвета в тексте запроса заменяются их кодами, и не требуется обращение к словарю во время исполнения запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 23:24 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
Спасибо, Akina, за технологию, но всё же не совсем понятно, как эти реализовать на практике, да к тому же, чтобы и производительность была на уровне. Я применил другой подход. Он пригоден там, где кол-во значений параметра не больше 60. bigint - 2^63. Пронумеровал все значения параметра от 2^0 до 2^(n-1). Например, красный - 1, желтый - 2, зеленый - 4 и т.д. 8,16,32 - по степеням двойки. В фильтре тоже задаётся комбинация(сумма) этих значений. Например, 6 - желтый и зеленый. Потом Код: sql 1. Производительность нормальная. Нет никаких доп таблиц и джойнов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2016, 15:26 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
dmaytry79, как частный вариант очень хорошее решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2016, 15:49 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
Нормальный подход. Ты собственно использовал обычную масочную формализацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2016, 16:12 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
dmaytry79Потом Код: sql 1. А это действительно решает поставленную задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 10:03 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
paverА это действительно решает поставленную задачу? Конечно, нет. Для решения задачи нужен Bitwise XOR. Но если автора устраивает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 14:39 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
А почему AND не решает задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 15:38 |
|
||
|
Фильтр по отдельным значением строки с разделителем
|
|||
|---|---|---|---|
|
#18+
dmaytry79, возвращает запись, если хотя бы один цвет совпадет. Для вашего условия нужен NOT Bitwise XOR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 05:23 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=84&tid=1831080]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 361ms |

| 0 / 0 |
