0

到目前为止,我已经尝试过这种方法,它似乎得到了我想要的所有行,除了我正在执行 REGEXP 的部分

SELECT p.id
FROM package AS p 
    LEFT JOIN myservice AS s ON s.package = p.id 
WHERE s.category IN (17,7,13,3,4,60,8) 
GROUP BY p.id
HAVING GROUP_CONCAT(s.category) REGEXP 17|7|13|3|4|60|8

如果我在正则表达式之后只使用一个数字,它将正确返回包含 17 的所有行,但是当我使用 | 添加另一个值时 它停止工作。

我做错了什么,是否有更好的方法来使用 Eloquent?

4

1 回答 1

0

首先:正则表达式不适合 SQL 选择器,这是它们没有得到普遍支持的原因之一。它们很慢,不允许使用索引并且很难“正确”,例如“8”将匹配 8、18、81、28、82、128、182 等。

例如GROUP_CONCAT(s.category) REGEXP "17",只要您只有几个类别,它将仅匹配类别 17,但是当您拥有类别 170+ 时,它也将匹配 170、171、...

现在回答你的问题:如果我没看错,你有(正确的)选择器s.category IN (17,7,13,3,4,60,8),但由于它是左连接,你也会得到NULL值并希望将它们过滤掉。只需检查即可轻松完成此操作s.category IS NOT NULL

于 2019-07-18T06:59:34.253 回答