SQL-запрос ORDER BY с предложением WHERE

0

У меня есть 2 стола. Первый с информацией абонентов:

--------------------------------------------------------
| id |    first_name    |   last_name  |     mail      |
--------------------------------------------------------
| 1  |       Jean       |    Bono      | [email protected] |
--------------------------------------------------------
| 2  |       Paul       |     Dodu     | [email protected]|
--------------------------------------------------------

Второй с настраиваемыми полями:

------------------------------------------------------
| id | subscriber_id | custom_field_id |   value     |
------------------------------------------------------
| 1  |       1       |        1        | Photographer  |
------------------------------------------------------
| 2  |       1       |        2        | 00000000    |
------------------------------------------------------
| 3  |       2       |        1        | Journalism|
------------------------------------------------------
| 4  |       2       |        2        | 00000000    |
------------------------------------------------------

Я хотел бы заказать мои подписчики по значению, где id = 1 или строковым значением (не int).

Например, во-первых, все "Журналистика", во-вторых, все "Фотограф",

Вот мой SQL-запрос (тест):

SELECT sub.*, cf.* 
FROM subscribers AS sub 
JOIN subscriber_custom_field AS cf 
ON cf.subscriber_id = sub.id 
WHERE sub.status = 'subscribed' 
ORDER BY cf.value

Но эта ошибка SQL-запроса вызывает смешение номера телефона и строки...

Любая идея?

Спасибо !

Теги:

1 ответ

0

Если вы хотите заказать значение custom_field_id = 1, вам нужно добавить условие WHERE в это поле, но вы привяжете строку только к настраиваемому полю = 1:

SELECT sub.*, cf.value as type
FROM subscribers AS sub 
JOIN subscriber_custom_field AS cf 
ON cf.subscriber_id = sub.id 
WHERE sub.status = 'subscribed' 
AND cf.custom_field_id = 1
ORDER BY cf.value

если вам нужно также выбрать другие настраиваемые поля, я думаю, вам нужно полностью изменить свой SQL, преобразовывая строки в столбцы с помощью подзапросов, иначе вы получите одну строку для каждого настраиваемого поля:

SELECT sub.*, 
       (SELECT cf.value FROM subscriber_custom_field WHERE cf.subscriber_id = subscriber_id AND custom_field_id = 1) AS type,
       (SELECT cf.value FROM subscriber_custom_field WHERE cf.subscriber_id = subscriber_id AND custom_field_id = 2 LIMIT 1) AS phone
FROM subscribers AS sub 
JOIN subscriber_custom_field AS cf 
ON cf.subscriber_id = sub.id 
WHERE sub.status = 'subscribed' 
ORDER BY (SELECT cf.value FROM subscriber_custom_field WHERE cf.subscriber_id = subscriber_id AND custom_field_id = 1)
  • 0
    Хорошо, но номер телефона дублируется в столбце типа.
  • 0
    Я не понимаю ваш комментарий
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню