MySQL多表选择与WHERE不比较2表

时间:2010-11-20 12:20:59

标签: mysql multiple-select

我有一个查询的开头:

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE tf_threads.thread_id=54

当然,这只是一个开始 - 我一步一步走,所以随着时间的推移,它会变得更好。然而,我现在坚持的是如何获得WHERE子句来比较一个表中的列与PHP变量,而不是另一列。

我拥有的PHP是:

SELECT $tf_threads.*, $tf_posts.* FROM $tf_threads, $tf_posts WHERE $tf_threads.thread_id=$tf_this_forum

这里重要的一点是$tf_threads.thread_id=$tf_this_forum。当我尝试这个时,它只返回没有行,MySQL说:Impossible WHERE noticed after reading const tables。当然这应该工作正常吗?显然,它没有,所以有人可以帮忙吗?

非常感谢,

詹姆斯

编辑:我也试过在纯MySQL中进行查询:

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE tf_threads.thread_id=54

两个WITH引号围绕54并且没有,并且没有相同的行结果。

2 个答案:

答案 0 :(得分:1)

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE
tf_threads.thread_id='$tf_this_forum'

注意:如果尚未转义,则应mysql_real_escape_string $tf_this_forum

答案 1 :(得分:1)

您的查询隐式执行CROSS JOIN,但它似乎包含太多$个符号。

我建议进行以下额外更改:

  • 使用ANSI-92连接(JOIN关键字)而不是ANSI-89连接(逗号)。
  • 使用intval应用于$ tf_this_forum以确保它是一个整数。
  • 考虑使用绑定参数,而不是动态地从字符串构造查询。
  • 在引用PHP变量时仅使用$

关于错误不可能在读取const表后注意到,这意味着没有匹配的行。检查您要搜索的行是否确实存在于您的数据库中。它可能不是。