代码之家  ›  专栏  ›  技术社区  ›  Bojangles Vincent Baillet

mysql多表选择与其中不比较2个表

  •  2
  • Bojangles Vincent Baillet  · 技术社区  · 14 年前

    我有一个疑问的开始:

    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中执行查询,如下所示:

    选择tf_threads.*,tf_posts.*从tf_threads,tf_posts,其中tf_threads.thread_id=54

    两者都用引号括起来 54 没有,结果是没有行。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Mark Byers    14 年前

    您的查询正在隐式执行交叉联接,它似乎包含太多 $ 标志。

    我建议您做以下额外更改:

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

    关于错误 不可能在读了常量表后注意到的地方 这意味着没有匹配的行。检查您正在搜索的行是否确实存在于数据库中。可能不是。

        2
  •  1
  •   thejh    14 年前
    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 如果它还没有逃走。