关于MySQL Query的4个问题

时间:2016-01-29 06:01:18

标签: php mysql

请查看随附的屏幕截图。

  • 在#0注意:我们可以写Select *或Select posts.ID而不是帖子。*?

  • 注意事项#1:我们可以在不破坏查询的情况下删除此语句吗?

  • 注意事项#2.1& #2.2:它们是相同的,为什么它们会复制相同的代码并将它们放在它们之间?我不明白。

  • 在笔记#3:我不知道为什么最后一个条件陈述被放在((和)之间)但是上面的条件陈述不是。

谢谢。

enter image description here

3 个答案:

答案 0 :(得分:3)

看起来此查询已被多次修改,因此其中一些是多余的。您可以执行SELECT *,但这将返回所有字段,而不仅仅是帖子字段。您可以删除WHERE 1=1并将其设为WHERE (".table....),而您只需要2.1而不是2.2。最后,你不需要为#3提供2套括号。

2.1和2.2之间的OR可能存在,因为它们最初可能有不同的东西,但差异被删除,因此不再需要它。这就是为什么你可以摆脱一个。

最初WHERE 1=1可能是另一回事,而是替换为WHERE 1=1以确保查询仍然运行而无需修改结构。整个查询看起来确实看起来已经发生了很大变化,因此最好简化它,以便更容易进行更改。您建议的所有更改都是正确的。

答案 1 :(得分:1)

回答您的疑问:

注意#0:

如果您想要从您加入的表格中获取所有列,那么您应该使用select *,如果您只想要特定表格的列,那么select post.*select postmeta.*或者您如果需要,还可以选择特定列作为select post.col1,postmeta.col1 ....etc

注意#1:

是啊..您可以删除语句where 1=1,因为此语句始终返回true,因此无需将其放在那里。

注意#2.1& #2.2:

在音符2.1和2.2之间不需要OR因为两个条件完全相同,所以如果其中一个变为真或假,则其他条件将相同。所以如果你只使用单一条件而不在它们之间使用OR,它最终会返回相同的值。

注意#3:

没有必要使用这些括号(注释3),因为您没有多个条件可以放在那里。你只需将其删除即可。

答案 2 :(得分:1)

注意#0: *会获取所有列,但建议仅写入所需的列。这可能会带来更好的性能,因为在大多数情况下,您不需要所有列。此外,当更改表模式(例如,添加了列)时,有可能无用地获取它。

注意#1:是的,可以将其删除。但是,一些程序员把它(特别是在使用动态查询时)只是为了能够像这样定义所有条件:AND {condition}。这看起来更好,因为所有条件都是均匀定义的,它应该对性能没有影响。

注意#2 :X OR X等于X,因此建议将其删除(DRY)。

注意#3 :可以在没有括号的情况下定义最后一个条件。一些程序员为条件添加括号,以确保它们不会遇到precedence个问题。建议均匀使用括号(在所有条件下或无条件下使用它们)。但请注意,AND优先于OROR条件必须在与AND结合使用时使用括号。

关于查询的其他方面:

  1. FROMINNER JOIN通常放在单独的行中以提高可读性(所有关键字如SELECTFROMJOIN,{{ 1}}等往往位于查询的左侧。)

  2. PHP variable interpolation - PHP有一个很好的功能,它允许直接在字符串中集成变量以避免连接(和许多双引号)。所以,而不是

    " FROM" 。 $ table。 "发布INNER JOIN" 。 $ table。 " postmeta"

  3. 你可以写

    WHERE

    或类似的东西。