gpt4 book ai didi

php - 如何使用 mysql 和 php 连接 3 个表?

转载 作者:行者123 更新时间:2023-11-29 09:18:47 26 4
gpt4 key购买 nike

我有一个页面可以提取用户帖子、用户名、xbc/xlk 标签等,这是完美的...但是由于我是从 MyBB 公告板系统提取信息,所以它完全不同。回复时,人们可以通过简单的回复和更改来更改“主题”。

我不希望它显示更改后的主题标题,而只是显示该线程中所有帖子的原始标题。

默认情况下它会回复“RE:thread title”。他们可以轻松地编辑它,它将显示在“主题”单元格中,人们不会知道它发布在哪个线程中,因为他们在回复帖子时更改了线程。

所以我只想在他们回复时保留原始帖子标题。

有道理~??

表:mybb_users字段:uid、用户名

表:mybb_userfields字段:ufid

表:mybb_posts字段:pid、tid、回复、主题、ufid、用户名、uid、消息

表:mybb_threads字段:tid、fid、主题、uid、用户名、lastpost、lastposter、lastposteruid

我尝试了多个查询但没有成功:

$result = mysql_query("
SELECT * FROM mybb_users
LEFT JOIN (mybb_posts, mybb_userfields, mybb_threads)
ON (
mybb_userfields.ufid=mybb_posts.uid
AND mybb_threads.tid=mybb_posts.tid
AND mybb_users.uid=mybb_userfields.ufid
)
WHERE mybb_posts.fid=42");


$result = mysql_query("
SELECT * FROM mybb_users
LEFT JOIN (mybb_posts, mybb_userfields, mybb_threads)
ON (
mybb_userfields.ufid=mybb_posts.uid
AND mybb_threads.tid=mybb_posts.tid
AND mybb_users.uid=mybb_posts.uid
)
WHERE mybb_threads.fid=42");

$result = mysql_query("
SELECT * FROM mybb_posts
LEFT JOIN (mybb_userfields, mybb_threads)
ON (
mybb_userfields.ufid=mybb_posts.uid
AND mybb_threads.tid=mybb_posts.tid
)
WHERE mybb_posts.fid=42");

最佳答案

您的语法不适合执行多个LEFT JOIN。每个连接都需要自己的 ON 子句。

SELECT
*
FROM
mybb_users
LEFT JOIN mybb_userfields ON mybb_users.uid = mybb_userfields.ufid
LEFT JOIN mybb_posts ON mybb_userfields.ufid = mybb_posts.uid
LEFT JOIN mybb_threads ON mybb_posts.tid = mybb_threads.tid
WHERE
mybb_posts.fid = 42

此查询应该给出您想要的结果。但它可能不是获取这些结果的最有效的查询。检查 EXPLAIN 的输出作为测试的一部分,以确保它没有使用表扫描或类似的东西。

所有这些连接都需要是LEFT JOIN吗? LEFT JOIN 强制 MySQL 按指示的顺序连接表,而不是让查询优化器确定连接它们的最佳顺序。这就是为什么您可能需要小心查询执行计划。就查询输出而言,JOINLEFT JOIN 之间的主要区别在于,LEFT JOIN 结果集每行至少包含一行联接左侧的表的行,而如果联接右侧没有匹配项,则常规 JOIN 将不包含行。

编辑:另外,你说“我不希望它显示更改后的主题标题,而只是显示该线程中所有帖子的原始标题。”这表明您只需要这些表中列的子集,在这种情况下 SELECT * 是不合适的。

关于php - 如何使用 mysql 和 php 连接 3 个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3077336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com