我想改进我的 SQL 搜索。当前的查询如下所示:
$query->where('(a.id LIKE ' . $search . ' OR a.invoiceid LIKE ' .
$search . ' OR c.lastname LIKE ' . $search . ' OR c.firstname LIKE ' .
$search . ' OR c.company LIKE ' . $search . ' OR a.creationdate LIKE ' .
$search . ' OR a.duedate LIKE ' . $search . ' OR a.totalsum LIKE ' .
$search . ')');
这已经很有效了:-)
但是如果我可以输入 1,23
而不是 1.23
并获得保存的 float 的结果(totalsum
>).
日期字段保存为DATETIME
。如果能在搜索中使用其他日期格式(如 22.09.1980
)获得结果并获得 1980-09-22 00:00:00
的点击,那就太好了。
最佳答案
您可以使用逗号替换功能:
'a.totalsum LIKE REPLACE(' . $search . ", ',', '.')"
但是对于日期来说,任务更加复杂,因为您需要识别模式。有一个library MySQL支持正则表达式替换。但我建议你使用 PHP:
//replace dd.mm.yyyy -> yyyy-mm-dd
$search = preg_replace('/^(\d{2})\.(\d{2})\.(\d{4})$/', '$3-$2-$1', $search);
关于MySQL:搜索术语应考虑 float 的点和逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32346760/