2015-07-11 3 views
1

Я делаю базу данных, которая обрабатывает диалог для проектов.Сложный (или очень, очень простой) запрос MySQL?

У меня есть проект стола, диалога стола, и перевода таблицы.

Каждая запись в каждой таблице имеет столбец id.

  • диалог имеет projectID столбец, который указывает проект диалог является частью.
  • перевод имеет столбец dialogueID, который указывает на перевод переведенного диалога.

Таким образом, чтобы объяснить эту проблему, вот псевдо-запрос я построил:

SELECT * 
FROM translation 
WHERE (translation.dialogueID refers to dialogue where dialogue.projectID = X) 

В принципе, я хочу, чтобы извлечь все записи перевода для проекта X. Поскольку нет прямого пути от проекта -> перевод, мне придется пройти через проект -> диалог, затем диалог -> перевод. Я предпочел только добавить projectID в таблицу переводов, но это немного неуклюже.

+0

Вы спрашиваете об использовании двух JOIN? –

+0

Нет подсказки. Я никогда не использовал инструкцию JOIN. – milkmanjack

ответ

3

Если вы знаете, что идентификатор проекта (X), то вы можете использовать:

SELECT t.* FROM translation AS t, dialogue AS d 
WHERE t.dialogueID = d.id AND d.projectID = X 

Если вы не знаете идентификатор проекта, но вы знаете, что это имя (X) или что-то, что вы можете обратиться к нему, вы можете использовать:

SELECT t.* FROM translation AS t, dialogue AS d, project AS p 
WHERE t.dialogueID = d.id AND d.projectID = p.id AND p.name='X' 
+0

Я вижу. Таким образом, на самом деле происходит повторение каждого уникального спаривания строки перевода и диалога в первом запросе? Это очень сумасшествие. Я понятия не имел, что вы можете сделать что-то подобное. Большое спасибо за быстрый ответ. Работает отлично. – milkmanjack

+2

Рад, что я мог бы помочь. Я бы рекомендовал индексировать столбцы идентификаторов, если вы еще не успели ускорить процесс выбора, если вы повторяете кучи строк. Там хорошая дискуссия здесь http://stackoverflow.com/questions/5696897/what-are-the-biggest-benefits-of-using-indexes-in-mysql – mongjong

+1

Я бы рекомендовал использовать JOIN. Это было около 20 лет, поэтому давайте начнем его использовать! – Strawberry

Смежные вопросы