带有重复字段的MySQL JOIN查询语法 - " database.table.field"

时间:2016-02-01 00:40:39

标签: php mysql join

我在同一个数据库中有这两个MySQL表,我正在利用它来建立像网站这样的论坛。我的问题是关于加入表格中的新字段的正确查询"主题"基于" user_id"两者之间的联系。

表"用户",其中字段" user_id"在注册时创建,自动增量:

USERS
╔═════════╦══════════╦═══════════╦══════════╦════════╗
║ user_id ║ username ║ firstname ║ lastname ║ etc... ║
╠═════════╬══════════╬═══════════╬══════════╬════════╣
║       1 ║ JJJJ     ║ John      ║ Johnson  ║ etc... ║
║       2 ║ MMMM     ║ Max       ║ Maxman   ║ etc... ║
║       3 ║ AAAA     ║ Alex      ║ Aleckson ║ etc... ║
╚═════════╩══════════╩═══════════╩══════════╩════════╝

表"主题",其中" user_id"当任何用户提交您通常在论坛网站上称为新主题的内容时,将从另一个表中获取。

TOPICS
╔══════════╦═════════════╦═══════════════════╦═════════╦═════════╗
║ topic_id ║ description ║     datetime      ║ user_id ║ etc ... ║
╠══════════╬═════════════╬═══════════════════╬═════════╬═════════╣
║        1 ║ bla bla     ║ dd mon yyyy hh:mi ║       3 ║ etc...  ║
║        2 ║ bla bla     ║ dd mon yyyy hh:mi ║       3 ║ etc...  ║
║        3 ║ bla bla     ║ dd mon yyyy hh:mi ║       2 ║ etc...  ║
╚══════════╩═════════════╩═══════════════════╩═════════╩═════════╝

我可以确认在db中成功建立了与db的连接。数据库名称是"网站"。我正在运行以下查询但没有成功,因为我喜欢你在第三个表中看到的结果(右边加入最后一个字段)。

mysql_query("SELECT topics.user_id, users.user_id
 FROM website.topics
JOIN website.users ON topics.who_posted_hangout;");
TOPICS
╔══════════╦═════════════╦═══════════════════╦═════════╦═════╦═══════════════════╗
║ topic_id ║ description ║     datetime      ║ user_id ║ etc ║ username          ║
╠══════════╬═════════════╬═══════════════════╬═════════╬═════╬═══════════════════╣
║        1 ║ bla bla     ║ dd mon yyyy hh:mi ║       3 ║ etc ║ AAAA              ║
║        2 ║ bla bla     ║ dd mon yyyy hh:mi ║       3 ║ etc ║ AAAA              ║
║        3 ║ bla bla     ║ dd mon yyyy hh:mi ║       2 ║ etc ║ MMMM              ║
╚══════════╩═════════════╩═══════════════════╩═════════╩═════╩═══════════════════╝

我使用了一个例子,我看到有人编写查询,但有些事情对我没有意义:

  • Q1:在我以前编写查询的例子中,他为什么只提到1个表格,其中" FROM"当他实际从两个表中选择数据时?
  • Q2:就上述问题而言,由于user_id是两个表中的字段,因此该查询的行为是否会出乎意料?
  • 问题3:我看到你可以选择" table1.field1"用这种语法。在过去,我也看过" database1.table1"在查询中也是如此。哦,我实际上在查询中使用这种格式/语法,你可以看到(考虑"网站"是数据库的名称)。你有没有时间,你可以这样选择:" database1.table1.field1",正是因为" user_id"是重复的,每个表一个? - 崇高的文字不会识别" 3-way.3-way.3-way"作为正确的语法,因为有两个点。
  • 问题4:最后也同样重要的是,为什么我的查询不起作用,如果你知道什么是错的,你可以修改吗? : - /


提示:如果您想在stackoverflow问题中显示这样的表格,请使用http://www.sensefulsolutions.com/,复制unicode艺术结果,并将其放在<pre> </pre>标记之间。

2 个答案:

答案 0 :(得分:1)

尝试:

'SELECT * FROM topics INNER JOIN users ON topics.user_id = users.user_id WHERE topics.user_id = the_user_id';

答案 1 :(得分:1)

在Q1中,虽然他在FROM子句中没有包含website.users,但是通过在连接中引用它来推断它。通过在连接中包含该字段,假定该表可用于查询。

Q2:在两种情况下对user_id的引用都附有表名:users.userid,topics.user_id。如果他在没有表名的情况下使用了user_id,那就会出错。

问题3:是的......你是对的!

问题4:我不能100%确定您希望您的查询选择什么,所以我还没有建议......但是如果您进一步解释一下,或许我们可以提供帮助。