请查看随附的屏幕截图。
在#0注意:我们可以写Select *或Select posts.ID而不是帖子。*?
注意事项#1:我们可以在不破坏查询的情况下删除此语句吗?
注意事项#2.1& #2.2:它们是相同的,为什么它们会复制相同的代码并将它们放在它们之间?我不明白。
在笔记#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
优先于OR
,OR
条件必须在与AND结合使用时使用括号。
关于查询的其他方面:
FROM
和INNER JOIN
通常放在单独的行中以提高可读性(所有关键字如SELECT
,FROM
,JOIN
,{{ 1}}等往往位于查询的左侧。)
PHP variable interpolation - PHP有一个很好的功能,它允许直接在字符串中集成变量以避免连接(和许多双引号)。所以,而不是
" FROM" 。 $ table。 "发布INNER JOIN" 。 $ table。 " postmeta"
你可以写
WHERE
或类似的东西。