Добавлено: 15.06.2018 / 18:21
Всем привет.
Помогите пожалуйста разобраться, сам не могу додумать.
Ситуация следующая:
Есть таблица mysql `catalog` выглядит так:
id name .... others
1 яблоко 35,36
2 груша 34,35,36
3 киви 33,34,35
Есть массив
$mass= array("34", "35");
Как вывести значения которые бы были равны массиву, в не зависимости в каком порядке записаны в столбце `others`
Т.е. я должен получить на выходе строку с id=2 и строку с id=3
Добавлено: 15.06.2018 / 18:45
Люблю этот форум, сам спрошу, сам отвечу
Придумал такой костыль
SELECT * FROM `catalog` WHERE FIND_IN_SET('34', others) > '0' or FIND_IN_SET('35', others) > '0'
Правильно ли это?
Добавлено: 15.06.2018 / 18:53
Еще вариант:
SELECT * FROM `catalog` WHERE `others` LIKE('%34%') or `others` LIKE('%35%')
Кто подскажет, как лучше?
Добавлено: 15.06.2018 / 19:01
Только не ‘or’ а ‘and’
erricss, У тебя структура таблицы непонятная, что там в others строки, enum, или еще что то?
find_in_set, и like не будут индексы использовать.
А на твой вопрос(надо получить 1 и 2) проще всего ответить, так и сделай выборку по 1 и 2
В other “text utf-8” думаю переделать на varchar в эти ячейки записываю индексы второй таблицы. После буду фильтровать по этим индексам.
erricss, find_in_set вполне подойдет, можно IN использовать
SELECT * FROM `catalog` WHERE others IN (34,35)
like будет хуже работать.
Если в колонке изветсно какие будут числа макс - мин можно enum тип сделать.
Добавлено: 15.06.2018 / 19:39
kantry, In не подходит, т.к. Порядок не известен, а какой способ работает быстрее, не знаете? Первый или второй?
Добавлено: 15.06.2018 / 19:44
Разве есть разница в скорости с varchar и enum?
Просто enum по умолчанию будет ставить «0» что может привести, к сложностям.
erricss, У тебя в любом случае на full scan будет запрос уходить. Не enum а set, я неправильно поглядел на данные. Если таблица не большая то find_in_set & find_in_set справится. На очень большой таблице тормозить будет, лучше отдельную табличку сделать.
Set & enum по дефолту можно null сделать.
у меня похожий вопрос.
есть таблица со списком фруктов.
слива
яблоко
груша
абрикос
слива
яблоко
абрикос
надо подсчитать сколько раз повторяется к примеру те что встречаются в таблице дважды.
тоесть должен получится ответ 3.
# dilp (19.11.2019 / 02:42)
у меня похожий вопрос.
есть таблица со списком фруктов.
слива
яблоко
груша
абрикос
слива
яблоко
абрикос
надо подсчитать сколько раз повторяется к примеру те что встречаются в
SELECT count(*) as `count` from (
SELECT count(name) as cnt, name
FROM `fruits` as fr
GROUP BY name
HAVING cnt = 2
) as gfr