最近我尝试了新的方法来过滤/命令SQL查询:而是在SQL查询中过滤/排序结果我“按原样”提取所需的所有数据,然后使用php代码执行过滤器/订单。
例如:我只希望按日期命名为“test”的事件。
表格结构:
id eventDate eventName
新方式:
$query = mysqli_query($GLOBALS["link"], "SELECT `eventDate`, `eventName` FROM `tablename` WHERE `id`='X' ");
while($data = mysqli_fetch_array($query))array_push($this->events,$data);
然后我在php中使用array_fillter
和usort
/ array_multisort
和array_values
...
旧方式:
$query = mysqli_query($GLOBALS["link"], "SELECT `eventDate`, `eventName` FROM `tablename` WHERE `id`='X' AND (`eventName` LIKE '%test%') ORDER by `eventDate` DESC ") ;
while($data = mysqli_fetch_array($query))array_push($this->events,$data);
那么更好的是什么? 复杂的SQL查询或按“原样”提取所有数据,然后在php中制作过滤器和订单?
以上示例非常简单。我说的是更复杂的过滤......
如果您完全确定,请回答!
谢谢:)
答案 0 :(得分:1)
Logicaly mysql在所有情况下都会更快(避免数据传输到php,mysql是用c ++编写的),但它是要测试的主题。
使用索引显示真正的力量。在您的情况下,您使用"喜欢'%value%'"这会禁用索引。但是可以用全文索引轻松解决。 InnoDB引擎也支持MySql 5.6全文索引。
答案 1 :(得分:0)
答案取决于许多因素,包括:
你的milage我的变化。每个人都有自己的意见,但根据我的个人经验,我发现使用本机SQL过滤通常是更好的选择。请记住,最终目标应该是干净,可维护的代码。使用SQL Formatter可以使SQL更具可读性。