【发布时间】:2016-02-01 00:40:39
【问题描述】:
我在同一个数据库中拥有这两个 MySQL 表,我正在将其用于类似网站的论坛。我的问题是关于基于两者之间的“user_id”链接加入表“主题”内的新字段的正确查询。
表“users”,其中字段“user_id”在注册时创建,自动递增:
用户 ╔═════════╦══════════╦═══════════╦══════════╦═════ ═══╗ ║ user_id ║ 用户名 ║ 名字 ║ 姓氏 ║ 等等... ║ ╠═════════╬══════════╬═══════════╬══════════╬═════ ═══╣ ║ 1 ║ JJJJ ║ 约翰 ║ 约翰逊 ║ 等等... ║ ║ 2 ║ MMMM ║ Max ║ Maxman ║ 等等... ║ ║ 3 ║ AAAA ║ 亚历克斯 ║ 亚历克森 ║ 等等... ║ ╚═════════╩══════════╩═══════════╩══════════╩═════ ═══╝
表格“topics”,其中“user_id”取自另一个表格,当任何用户提交您通常称为论坛网站上的新主题的内容时。
主题 ╔══════════╦═════════════╦═══════════════════╦════ ═════╦═════════╗ ║ topic_id ║ 描述 ║ 日期时间 ║ user_id ║ 等等 ... ║ ╠══════════╬═════════════╬═══════════════════╬════ ═════╬═════════╣ ║ 1 ║ bla bla ║ dd mon yyyy hh:mi ║ 3 ║ 等等... ║ ║ 2 ║ bla bla ║ dd mon yyyy hh:mi ║ 3 ║ 等等... ║ ║ 3 ║ bla bla ║ dd mon yyyy hh:mi ║ 2 ║ 等等... ║ ╚══════════╩═════════════╩═══════════════════╩════ ═════╩═════════╝
我可以确认在 PHP 中成功建立了与数据库的连接。数据库名称是“网站”。我正在运行以下查询但没有成功,因为我希望成为您在第三个表中看到的结果(右连接最后一个字段)。
mysql_query("SELECT topics.user_id, users.user_id
FROM website.topics
JOIN website.users ON topics.who_posted_hangout;");
主题 ╔══════════╦═════════════╦═══════════════════╦════ ═════╦═════╦═══════════════════╗ ║ topic_id ║ 描述 ║ 日期时间 ║ user_id ║ 等 ║ 用户名 ║ ╠══════════╬═════════════╬═══════════════════╬════ ═════╬═════╬═══════════════════╣ ║ 1 ║ bla bla ║ dd mon yyyy hh:mi ║ 3 ║ 等 ║ AAAA ║ ║ 2 ║ bla bla ║ dd mon yyyy hh:mi ║ 3 ║ 等 ║ AAAA ║ ║ 3 ║ bla bla ║ dd mon yyyy hh:mi ║ 2 ║ 等 ║ MMMM ║ ╚══════════╩═════════════╩═══════════════════╩════ ═════╩═════╩═══════════════════╝
我使用了一个我在某个地方看到的示例来编写查询,但有些东西对我来说没有意义:
- Q1:在我写查询的例子中,为什么他实际从两个表中选择数据时只提到了“FROM”的1个表?
- Q2:关于上面的问题,这个查询会不会因为 user_id 是两个表中的字段而出现异常?
- Q3:我看到您可以使用此语法选择“table1.field1”。过去,我也在查询中看到“database1.table1”。哦,如您所见,我实际上在查询中使用了这种格式/语法(考虑到“网站”是数据库的名称)。您是否可以并且应该有时像这样选择:“database1.table1.field1”,正是因为“user_id”是重复的,每个表中都有一个? - 由于两个点,崇高文本不会将“3-way.3-way.3-way”识别为正确的语法。
- Q4:最后同样重要的是,为什么我的查询不起作用,如果您知道问题所在,可以修改它吗? :-/?
提示:如果你想在stackoverflow问题中显示这样的表格,请使用http://www.sensefulsolutions.com/,复制unicode艺术结果,并将其放在
<pre> </pre>标签之间。
【问题讨论】:
-
在第一季度,虽然他没有在 FROM 子句中包含 website.users,但它是通过在连接中引用它来推断的。通过在连接中包含该字段,该表被假定为可用于查询。
-
1.
website.users上的连接允许您从两个表中获取数据。 -
2.这些列由表名引用,例如
topics.user_id和users.user_id。如果你只有user_id,你会得到一个查询错误。