Как привести результат MySQL к строке? - PullRequest
1 голос
/ 25 января 2010

Есть запрос:

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)

Теперь это не работает.
Мне удалось заставить его работать, выполнив эти запросы отдельно. Что я должен сделать, чтобы сохранить его в одном запросе?

Ответы [ 3 ]

4 голосов
/ 25 января 2010

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

Поскольку у вас есть все значения в одной ячейке, при выполнении сравнения IN все идентификаторы пользователя сравниваются со строкой "2,12,29,714,543,1719", которая, очевидно, не будет совпадать. Ваш запрос выглядит примерно так:

...FROM stolencards WHERE userid IN ("2,12,29,714,543,1719")
0 голосов
/ 25 января 2010

Если вы указали правильные типы данных и отношения 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
0 голосов
/ 25 января 2010

проверить, что типы данных blalist и userid совпадают, или blalist действительно возвращает userid?

...