如果我在使用时没有错,则在没有任何过滤器的情况下执行查询,然后代码将覆盖所有结果以应用过滤器。但在这种情况下,我使用多个Like // If来计算我的订单。我想知道之间会有什么好处:
Date SN 0
0 9/1/16 30 (728-13, 0, 0, 3)
1 9/1/16 32 (360, 0, 1, 4)
2 9/1/16 35 (718, 0, 0, 1)
3 9/1/16 38 (728-13, 0, 0, 2)
或
SELECT Page.*,
if (`flags` LIKE CONCAT('%',?,'%'),
if (`title` LIKE CONCAT('%',?,'%'),
5,
3
),
if (`title` LIKE CONCAT('%',?,'%'),
2,
0
),
) as pageOrder
FROM Page
WHERE `flags` LIKE CONCAT('%',?,'%') OR `title` LIKE CONCAT('%',?,'%')
ORDER BY pageOrder DESC
使用mysql 5.7和php 7.1
答案 0 :(得分:1)
在这个的情况下,没有太大区别。这是一个分析。
由于WHERE
或ORDER BY
无法使用任何索引,因此将扫描整个表格(适用于任何一种表格)。
表达式通常只是整个查询的一小部分,因此通常我会忽略LIKEs
。但是,在这种情况下,每行LIKEs
为LIKEs
,WHERE
方法的WHERE
大约是Page
的两倍,因此可能会慢一点。
一个可以认为 3 * (`flags` LIKE CONCAT('%',?,'%') +
2 * (`title` LIKE CONCAT('%',?,'%')
更具可读性。
print txt_again.read()
的所有列(大多数行)都将被铲入tmp表中。但我不认为这两种方法有很大的不同。此外,我不一定能找到避免这个问题的方法。
这是一种稍微更紧凑但不快的方式来制定pageOrder表达式:
An unhandled exception occcured.