Как отдать результат MySQL в строку?
-
22-09-2019 - |
Вопрос
Есть запрос:
SELECT blalist FROM blatable WHERE blafield=714
который возвращает строку, которая выглядит как: «2,12,29,714,543,1719». И есть еще один запрос:
SELECT userid, name, surname, creditcardnum, items
FROM stolencards WHERE userid IN
(SELECT blalist FROM blatable WHERE blafield=714)
Теперь это не работает.
Мне удалось заработать его только, выполняя эти запросы отдельно. Что я должен сделать, чтобы сохранить его в одном запросе?
Решение
Вы никогда не должны хранить более одного значения в одной ячейке. Каждое значение в blatable
должен быть в своем собственном ряду, тогда ваш IN
Пункт будет работать как шарм. Взгляните на нормализацию базы данных и особенно на Первая нормальная форма о том, как должны быть спроектированы ваши столы.
Поскольку у вас есть все значения в одной ячейке, делая IN
Сравнение приводит к тому, что все пользователи сравниваются со строкой «2,12,29,714,543,1719», что, очевидно, не совпадает. Ваш запрос эффективно выглядит так:
...FROM stolencards WHERE userid IN ("2,12,29,714,543,1719")
Другие советы
Проверьте тип данных блалиста и пользователя, ими же, или блалистская действительно возвращает пользовательскую?
Если вы указали правильные типы данных и отношения PK и FK, попробуйте:
SELECT s.userid, s.name, s.surname, s.creditcardnum, s.items
FROM stolencards s inner join blatable b on s.userid = b.blafield
where b.blafield = 714