Задать вопрос
@webpauk

Использование переменной как списка полей

Хочу связать 2 таблицы:
SELECT T1.id, <b>???</b>
FROM sc_user T1 
INNER JOIN sc_user_value T2 ON T1.id_user = T2.id
WHERE T1.ID = 1
LIMIT 1;


Нужные поля второй таблицы хранятся в третьей таблице, получаю запросом:
SELECT GROUP_CONCAT(CONCAT('T2.', name) SEPARATOR '+" "+') AS name FROM sc_user_field WHERE use_as_name ORDER BY sort


Результат запроса: T2.last_name+" "+T2.first_name+" "+T2.second_name

Вопрос: как объединить два запроса в один?
  • Вопрос задан
  • 2640 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 7
FanatPHP
@FanatPHP
Чебуратор тега РНР
Не надо хранить список имён полей в другой таблице.
Надо прочесть хотя бы букварь по реляционным базам данных и научиться ими пользоваться по-человечески.
Ответ написан
Никогда не перекладывайте бизнес логику на БД. БД - это место хранения а не обработки данных. Тогда ваши приложения окажутся зависимы.
Ответ написан
Комментировать
Webdesus
@Webdesus
Засовываете 2ой запрос в под запрос первого.
Получите что то типа этого.
Select t1.*,t2.*,t3.*
from t1
inner join t2 on t2.id=t1.t2id
inner join (select * from t3 ) as t3 on t3.id=t2.t3id
Ответ написан
Структуру таблиц скиньте, быстрее ответ получите.
Ответ написан
Комментировать
@webpauk Автор вопроса
упрощенная модель:

sc_user
id -> INT

sc_user_value
id -> INT
id_user -> INT (связано с sc_user.id)
добавляемые пользователем поля

sc_user_fields
name - CHAR (хранится имя поля sc_user_value.добавляемые пользователем поля)
Ответ написан
@webpauk Автор вопроса
упрощенная модель:

sc_user
id -> INT

sc_user_value
id -> INT
id_user -> INT (связано с sc_user.id)
добавляемые пользователем поля

sc_user_fields
name - CHAR (хранится имя поля sc_user_value.добавляемые пользователем поля)
Ответ написан
Комментировать
@webpauk Автор вопроса
используя php, конечно можно разбить запрос на 2 запроса, в первом - получить значение, и вставить его во второй запрос...
но... есть ли способ сделать одним запросом!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы