Поиск по массиву

532
.
erricss
Добавлено: 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’
.
Hey guys! Finally I'm gonna change status!?
erricss, У тебя структура таблицы непонятная, что там в others строки, enum, или еще что то?
find_in_set, и like не будут индексы использовать.
А на твой вопрос(надо получить 1 и 2) проще всего ответить, так и сделай выборку по 1 и 2
.
erricss
В other “text utf-8” думаю переделать на varchar в эти ячейки записываю индексы второй таблицы. После буду фильтровать по этим индексам.
.
kantry
Hey guys! Finally I'm gonna change status!?
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» что может привести, к сложностям.
.
kantry
Hey guys! Finally I'm gonna change status!?
erricss, У тебя в любом случае на full scan будет запрос уходить. Не enum а set, я неправильно поглядел на данные. Если таблица не большая то find_in_set & find_in_set справится. На очень большой таблице тормозить будет, лучше отдельную табличку сделать.
Set & enum по дефолту можно null сделать.
.
у меня похожий вопрос.
есть таблица со списком фруктов.

слива
яблоко
груша
абрикос
слива
яблоко
абрикос



надо подсчитать сколько раз повторяется к примеру те что встречаются в таблице дважды.
тоесть должен получится ответ 3.
.
Слоник
Blade
# 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
.
Слоник, да,оно, спасибо
Всего: 9