2013-07-05 4 views
2

Заранее благодарим за любую помощь, которую вы можете предложить. Я застрял на этом в течение нескольких часов этим утром, и ничто из поиска, похоже, не помогает.MYSQL Выберите элементы в списке из подзапроса

Я храню список учетных записей, связанные с клиентом в виде строки в моей базе данных, как это:

| li.client_accounts | 
    +-----+----------------+ 
    |ID |facility  | 
    +-----+----------------+ 
    |23 |1010, 1020, 1025| 
    +-----+----------------+ 

Я пытаюсь выбрать назначения из другой базы данных, где номер счета в списке с помощью суб-запрос, как это:

SELECT * FROM li_appointments.li_appointments 
    where app_client_id in (select facility from li_client_accounts where id = 23) 

Однако мои результаты только с указанием назначения с client_id 1010, и игнорируя остальные. Что мне нужно сделать, чтобы это работало?

+1

Вы вообще можете изменить дизайн своих таблиц? Приклеивание нескольких значений в одно поле нарушает первую нормальную форму - есть причина, почему такие запросы не работают. –

ответ

5

Это не работает, потому что предложение IN ожидает список полей. Однако в вашем случае facility представляет собой строку значений, разделенных запятыми, а не список запросов. Это плохой дизайн. Вы должны сделать свой стол client_accounts атомным, как:

| li.client_accounts | 
    +-----+----------------+ 
    |client_ID |facility | 
    +-----+----------------+ 
    |23 |1010| 
    |23 |1015| 
    |23 |1020| 
    +-----+----------------+ 
+0

Вы правы. Кажется, я пытался лениться с моим PHP-кодом. Спасибо, что подтолкнули меня в правильном направлении, –

0

Вы не можете использовать IN() подобные.

То, что вы на самом деле получить что-то вроде этого:

SELECT * FROM li_appointments.li_appointments 
    where app_client_id in ('1010, 1020, 1025') 

Это явно не то, что вы хотите.

Вам необходимо серьезно подумать о нормализации своего столбца facility, если вы хотите использовать его в реляционной манере.

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