SELECT * FROM products WHERE
serial LIKE '{$ssz}' //exact match, no other serials in row
OR serial LIKE '%,{$ssz}' //match at list end
OR serial LIKE '%,{$ssz},%' //match between other two serials
OR serial LIKE '{$ssz},%' //match at list beginning
这是我的理想查询,其中{$ ssz}是要搜索的PHP变量。
serial
TEXT列包含序列号列表,以逗号分隔。
序列号是唯一的,但是长度可变,因此可以使用“ AAB001”和“ AB001”。
也许使用正则表达式会更快?还是采用完全不同的方法?
答案 0 :(得分:3)
您可以将其缩短为:
SELECT p.*
FROM products p
WHERE FIND_IN_SET('{$ssz}', serial) > 0;
这看起来更漂亮,更易于编码。但这并不快。
出了什么问题? 问题出在您的数据模型上。您不应以分隔字符串存储事物列表。 SQL有这种存储列表的好方法。它称为表,而不是字符串。
您需要一个联结/关联表来存储您的数据。然后,您可以使用适当的索引来加快查询速度。