【问题标题】:mysql multiple queries or multiple 'or' operatorsmysql 多个查询或多个“或”运算符
【发布时间】:2023-03-22 12:00:01
【问题描述】:


假设我有这张桌子:

img_id, img_author, img_path
1     | BillyDoe  | img1.jpg
2     | BillyDoe  | img2.jpg
3     | BillyDoe  | img3.jpg

我运行另一个符合某些特定条件的查询 并且该查询返回一个数组,其中包含许多 img_author 名称,例如: BillyDoe、JillDoe、JohnDoe 等...

我要做的第二件事是获取所有图像 从与作者姓名匹配的图像表中

与所有作者一起创建一个循环会更好吗 命名返回的前一个查询并多次运行查询,像这样

select img_path from images_table where img_author = $curr_author_name

或者 我应该创建一个自定义函数,将所有作者姓名和 使用多个“或”运算符运行单个 sql 查询,如下所示:

select img_path from images_table where img_author = BillyDoe or img_author =  JillDoe or img_author =  JohnDoe ... x100 times

我是否会有任何形式的性能损失/增益做这些 两种方式?或者有更好的选择,比如多查询等。 总是在谈论性能方面,哪种方法会更少资源 激烈?

谢谢。

【问题讨论】:

  • 很确定你需要在那里转义这些字符串,因为img_author=BillyDoe 不是有效的 SQL,除非BillyDoe 是一个列。
  • 第一个查询是在同一张表还是不同的表上找到作者?
  • ORs 使用一个查询。最好有作者ids 并使用它可能使用IN() 子句。

标签: php mysql operators mysqli-multi-query


【解决方案1】:

我会使用连接进行单个查询,这样您就可以查询您要查找的 img_author 名称,然后针对此表连接以获取 img_path 信息。

您没有显示您提到的第一个查询以确定作者姓名,所以我无法给您一个具体的例子。但是该查询可能如下所示:

SELECT
    it.img_path AS img_path
FROM
    whatever_table_is_in_your_first_query AS x
INNER JOIN
    img_table AS it
ON x.author = it.img_author
WHERE
   ... /* whatever criteria you use to get author names */

在嵌套循环中进行查询绝对应该被视为一种要避免的反模式,除非您有非常具体的理由这样做并且了解性能权衡。

【讨论】:

  • 感谢您的回答!
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多