2014-12-26 2 views
1

У меня возникла проблема во время выполнения запроса с возвратом ключа IN. Вот мой вопрос:MySQL Query with IN return empty

SELECT * FROM `sc_miscellaneous` where discount_for=4 AND stud_id IN (1,2) AND status=1 

Этот запрос возвращает правильные результаты. Но если я использую IN (2,3) или IN (2) означает нулевые результаты. Например.

SELECT * FROM `sc_miscellaneous` where discount_for=4 AND stud_id IN (2,3) AND status=1 

Таблица sc_miscellaneous:

ID Miscellaneous misc_amount discount discount_for class stud_id    status 
1 5    200  2  4   1 1,2,3,4,5,6,   1 
                  7,8,9,10,11, 
                  12,13,14,15,16, 
                  17,18,19 

2 6    500  2  4   1 1,2,3,4,5,6,7   1 

Заранее спасибо.

+4

Какой тип stud_id? –

+0

см. [Это] (http://stackoverflow.com/questions/10480568/comma-separated-values-in-mysql-in-clause) или [это] (http://dba.stackexchange.com/questions/52492/mysql-using-comma-separated-values) –

ответ

0

Я думаю, что ваш тип stud_id был ИНТ сделать его VARCHAR и запустить код

stud_id(int)---->change to varchar 

вы должны работать с

in_array() 
+0

Тип stud_id - только varchar. – Krsmoorthi

0

Я не думаю, что так, как вы пишете запрос с использованием предложения IN - правильный путь.

Пожалуйста, проследуйте link

Согласно документации, если stud_id является целым числом, то вы можете проверить его с несколькими целыми числами, используя IN Clause. Например, если stud_id = 1, вы можете написать stud_id IN (1,2,3).

Для вашего требования вам может потребоваться написать несколько запросов для извлечения данных и сравнения.

+0

если изменить тип stud_id как int, значит, как он разрешает запятую. Мне нравится вставлять все идентификаторы студента в одну запись, а не вставлять нет. записей. Но первый запрос работает нормально, проблема только во 2-м, если мы выберем значение центра (кроме 1) в столбце stud_id, значит нет результата. – Krsmoorthi

1

Обновлено

Используйте следующий запрос

SELECT * FROM `sc_miscellaneous` 
WHERE stud_id LIKE '%,2,%' OR stud_id LIKE '%,3,%' 
    OR stud_id LIKE '2,%,' OR stud_id LIKE '3,%' 
    OR stud_id LIKE '%,2' OR stud_id LIKE '%,3' 

Как вы имеете VARCHAR список разделенных запятыми.

Проверить

1), если это уникальный номер, находится между разделенных запятыми,

2) или, если это то, что в начале

3), или, если его в конце.

+0

Это также приведет к восстановлению, например, stud_id = 12 или stud_id = 35. Если вы собираетесь разделять запятую (что вам не следует), то необходимо, чтобы запятая была включена в LIKE ('%, 2,%'), и вам нужно добавить запятую в начале и в конце значения в столбце. – Erik

+0

, но если мы используем средства LIKE, столбец имеет «22, 32» означает, что он также выбран. но нам нужен точный результат. -thanks – Krsmoorthi

+0

@ user1059687, да получилось, я буду обновлять ans. скоро. –