【问题标题】:Complex (or very, very simple) MySQL query?复杂(或非常、非常简单)的 MySQL 查询?
【发布时间】:2015-07-11 05:02:37
【问题描述】:

我正在创建一个数据库来处理项目的对话翻译。

我有一个project表、一个dialogue表和一个translation表。

每个表中的每个条目都有一个 id 列。

  • dialogue 有一个projectID 列,表示对话所属的项目。
  • translation 有一个 dialogueID 列,指示正在翻译的对话条目。

所以为了帮助解释这个问题,这是我构造的一个伪查询:

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

基本上,我想获取项目 X 的​​所有翻译条目。由于没有从项目 -> 翻译的直接路线,我必须通过项目 -> 对话,然后是对话 -> 翻译。与此同时,我选择在翻译表中添加一个projectID,但它有点笨拙。

【问题讨论】:

  • 你问的是使用两个 JOIN 吗?
  • 没有线索。我从来没有使用过 JOIN 指令。

标签: php mysql


【解决方案1】:

如果您知道项目 (X) 的 id 是什么,那么您可以使用:

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

如果您不知道项目 id,但您知道它的名称 (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'

【讨论】:

  • 我明白了。所以它实际上是在第一个查询中遍历翻译和对话行的每一个独特配对?这太疯狂了。我不知道你可以做这样的事情。非常感谢您的快速回复。完美运行。
  • 很高兴我能帮上忙。如果您在迭代行堆时还没有加快选择过程,我建议您索引您的 id 列。这里有很好的讨论stackoverflow.com/questions/5696897/…
  • 我建议使用 JOIN。它已经存在 20 年了,让我们开始使用吧!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2020-03-26
  • 1970-01-01
  • 2016-06-29
  • 2016-07-29
相关资源
最近更新 更多