2013-09-11 4 views
0

Мне нужна небольшая помощь. Я пытаюсь получить записи из базы данных по определенному критерию, но не в состоянии сделать точную логику, которая будет работать. Как у меня есть таблица, в которой я храню некоторые идентификаторы, какНевозможно создать правильный запрос

1,14,23,45,17,8,9,11 etc 

Я получаю массив как этот

1,2,19,45,56,65 

То, что я думал, было взорвать массив и сопоставить отдельные индексы для столбца в база данных. Но вот проблема ..

Если я использую

Как% значение% запрос, он возвращает не требуемые результаты, например, если мы запустим

SELECT * 
FROM `table` 
WHERE `table_skills_id` LIKE '%2%' 
LIMIT 0 , 30 

Вы можете видеть, что 2 не было в начальный массив или столбец, который я написал выше, но поскольку там был 23, он ответил, что есть один результат, соответствующий тому, где он должен был иметь 0 строк, соответствующих

Я хочу, чтобы он соответствовал целому числу, а не соответствовал им отдельно. Я пробовал «Like% 2», а также «Like 2%», но никто из них не работает должным образом.

Любая быстрая помощь была бы высоко оценена.

Спасибо.

+0

Единственная правильная логика для этой проблемы - процесс, который называется нормализацией базы данных. –

ответ

1

Вы можете использовать FIND_IN_SET функцию:

SELECT * 
FROM `table` 
WHERE FIND_IN_SET('2', `table_skills_id`)>0 
LIMIT 0 , 30 
+0

скажите мне одну вещь здесь ... она отлично работала ... могу ли я сразу же передать массив? как то, что я делаю в данный момент, сначала взламывает входной массив на куски, а затем проверяет каждую запись один за другим ... могу ли я передать массив прямому запросу? Некоторые вещи, как SELECT * FROM ' table' ГДЕ FIND_IN_SET ($ массив,' table_skills_id')> 0 LIMIT 0, 30 Позвольте мне знать, пожалуйста Спасибо – Omicans

+0

@AhmadNawaz По ним руководство никогда не будет работать, что way 'Возвращает 0, если str не находится в strlist, или если strlist является пустой строкой' – amaster

+1

@AhmadNawaz, к сожалению, это невозможно, вам следует подумать о нормализации ваших данных (идентификаторы, разделенные запятыми, имеют множество ограничений, и вы не можете сделать использование индекса, чтобы они делали запросы медленными) – fthiella

1
SELECT * 
FROM `table` 
WHERE `table_skills_id` IN (1,2,19,45,56,65) 
LIMIT 0 , 30 
0

Я думаю, что вы хотите "в" аппаратчик, как:

SELECT * FROM table ГДЕ table_skills_id в (1,2, 19,45,56,65).

Смежные вопросы