У меня есть 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-запроса вызывает смешение номера телефона и строки...
Любая идея?
Спасибо !
Если вы хотите заказать значение 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)