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

Можно ли составить такой sql запрос?

Есть одна таблица со статьями, в ней содержатся столбцы id, название, текст, дата.
Получаю из нее данные следующим образом SELECT id, name, date, text FROM articles

И есть вторая таблица со свойстами статей articles_property в которой есть столбцы property_id, article_id, value
Вопрос как мне в мой запрос добавить к примеру автора статьи value у которого property id = 10, а article_id = id из первой таблицы?

PS: Вариант нашел через JOIN, но тогда автора я получаю как value, а мне бы его переназвать например в author, так как может быть возможность получения двух свойств. Понятное дело, что такие вещи нужно делать отдельными запросами, но мне для sphinx, где особо не разгуляешься.
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@alexalexes
Если универсальный запрос составлять, который не зависит от состава свойств, то он будет многострочный, нужно собирать свойства в массив в той среде откуда обращались к СУБД:
select 
  ar.id, 
  ar.name, 
  ar.date, 
  ar.text,
  ap.property_id,
  p.name as property_name, --поскольку у вас есть в базе реализовано универсальное хранение свойств, то почему бы не вывести имя свойства из справочника?
  ap.value as property_value
from  articles as ar
left join articles_property as ap on  ap.article_id = ar.id
                                                        and ap.property_id in (/* перечисляем все необходимые свойства */) 
left join property as p on  ap.property_id = p.id -- справочник названий свойств

Другой вариант запроса дает конкретные значения свойств, и довольно плоскую выборку, не требующую постобработки (одна строка - это строго одна статья). Но такой запрос не универсален по набору свойств.
select 
  ar.id, 
  ar.name, 
  ar.date, 
  ar.text,
 (select value
    from articles_property as ap
  where ap.article_id = ar.id
      and ap.property_id = 10) as author
from  articles as ar
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@WaterSmith
Android-разработчик. Java, Kotlin
чрез JOIN, но тогда автора я получаю как value

все верно, соединяете по условию (id = 10 AND article_id = id) вам остался один шаг, переименуйте value с помощью "AS": value AS author
StiflerProger в комментарии написал правильный запрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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