Выбор нескольких переведенных статей (записей) - PullRequest
0 голосов
/ 06 июня 2011

Как выбрать, т.е. 10 статей, без необходимости запуска 1 запроса для выборки каждого перевода статьи (всего 11 запросов)?У меня 3 стола;Культуры, статьи и переводы:

Cultures
id code language
-- ---- ---------
1  en   English
2  no   Norwegian

Articles
id title content      
-- ----- -------------
1  Home  Hello, world!
2  About This is me...
...

Translations
id culture object FK field   value
-- ------- ------ -- ------- ---------------
1  1       Page   1  title   Home
2  1       Page   1  content Hello, world!
3  2       Page   1  title   Hjem
4  2       Page   1  content Hei, verden!
5  1       Page   2  title   About
6  1       Page   2  content This is me...
7  2       Page   2  title   Om
8  2       Page   2  content Dette er meg...
...

Любая помощь будет принята с благодарностью!

Редактировать: Скажите, я хочу получить все статьи, переведенные на норвежский язык.Это мой неполный запрос (он еще не соединяет FK с a.id):

SELECT
    a.id,
    (SELECT tr.value FROM translations tr WHERE tr.object='Page' 
AND field='title' AND tr.culture=2) as title,
    (SELECT tr.value FROM translations tr WHERE tr.object='Page' 
AND tr.field='content' AND tr.culture=2) as content
FROM
    articles a

Редактировать 2: та же проблема, что и здесь: Лучший запрос mysql для выбора нескольких строк, КАЖДЫЙ из которых требуется несколько ассоциативныхстроки из другой таблицы

1 Ответ

1 голос
/ 06 июня 2011

Ну, translations.FK похоже связано с идентификатором статьи. Таким образом, вы выбираете все статьи, и для каждой статьи вы выбираете все переводы.

С помощью этого запроса код вашего приложения должен будет интерпретировать материал "title" / "content".

SELECT c.language, a.title, t.field, t.value
FROM articles a 
JOIN translations t ON a.ID = t.FK
JOIN cultures c on t.culture = c.id

С помощью этого запроса вы получаете столбец 'title' и 'content'

SELECT a.title, t1.value as title, t2.value as content
FROM articles a 
JOIN translations t1 ON a.ID = t1.FK and t1.field = 'title'
JOIN translations t2 ON a.ID = t2.FK and t2.field = 'content'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...