今天我在一个搜索查询中发现问题,我找不到简单的解决方案。
我们有查询:
SELECT
invoice_id, firstname, lastname
FROM
table
WHERE
email = '24assets@example.com' OR
firstname = '24assets@example.com' OR
lastname = '24assets@example.com' OR
invoice_id = '24assets@example.com'
这里的问题是我们按invoice_id
搜索 - int(10)UNSIGNED。
Mysql自动将24assets@example.com转换为整数:24并显示具有invoice_id = 24的行的结果
我找到的唯一解决方案是在发送到SQL查询之前检查是否为数字,如果不是数字则执行另一个不包含invoice_id的查询。
这是示例查询,真实查询通过此invoice_id
有3个JOIN第一次执行此查询时,看到结果非常惊讶: 24 :
SELECT invoice_id FROM table WHERE invoice_id = '24aaa@aaa.aa'
我之前不知道这个演员,因为通常不会在整数列中搜索蜇然后我在谷歌中读到这个。
答案 0 :(得分:0)
我认为这会有效,但我认为在你的代码中处理它(php我假设?)会更清楚。
复杂的解决方法:
SELECT
invoice_id, firstname, lastname
FROM
table
WHERE
email = '24assets@example.com' OR
firstname = '24assets@example.com' OR
lastname = '24assets@example.com' OR
invoice_id = concat('','24assets@example.com' * 1)