2016-08-19 2 views
-4
Table example: 
id - registro - valor 
1 - compras - 1,2,6 
2 - ventas - 3,4 
3 - deudas - 5 
4 - Something - 13,14,15,16,10 

У меня есть эта таблица в базе данных. Я хочу сделать запрос, когда я отправляю только номер 3, и я переношу регистр 2. В этом примере. Это может быть сделано. IN с и не делайте этого, я попробовал его с CONTAINS, и это не так. Я должен сделать ... ПомощьКак вернуть запись, содержащую несколько значений, разделенных запятыми php mysql

+3

'find_in_set' является вашим другом. Но вы должны подумать о своем дизайне db. Сохранение значений как csv очень плохой дизайн db – Jens

+0

Я не храню данные как csv. только для преобразования массива в строку с использованием запятой в качестве разделителя. вот и все.. –

ответ

1

Как @Jens говорит, вы можете использовать the FIND_IN_SET() function для этой цели.

SELECT registro 
    FROM tbl 
WHERE FIND_IN_SET('3', valor) > 0 

И, как @Jens сказал, это плохой дизайн базы данных. Сохранение более чем одного значения в определенном столбце строки приводит к поражению многих оптимизаций, встроенных в системы RDMS.

Вы бы лучше с двумя столами:

мастер

master_id - registro 
1  - compras 
2  - ventas 
3  - deudas 
4  - Something 

деталь (обратите внимание, есть только один valor на строку здесь)

master_id - valor 
    1  - 1 
    1  - 2 
    1  - 6 
    2  - 3 
    3  - 4 
    etc. 

Затем вы можете использовать запросы, как это

SELECT master.registro 
    FROM detail 
    JOIN master ON master.master_id = detail.master_id 
    WHERE detail.valor = 3 

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

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