具有相同数据的所有列的mysql regexp

时间:2015-12-29 14:45:58

标签: mysql regex

我有一张这样的桌子。

 id     name    father_name     age
  1     raja     first          12
  2     second   first          13

当我执行以下查询时。

SELECT * FROM class WHERE name REGEXP 'first|12'
OR father_name REGEXP 'first|12'
OR age REGEXP 'first|12'

我得到了以下结果。

id  name    father_name     age
1   raja     first          12
2   second   first          13

但我想在下面作为结果。

id  name    father_name     age
1   raja     first          12

如果我用或更改名称。我可以实现。但是 同时用户给予raja | 12表示

SELECT * FROM class WHERE name REGEXP 'raja|12'
    OR father_name REGEXP 'raja|12'
    OR age REGEXP 'raja|12'

我想要这样的结果。

id  name    father_name     age
1   raja     first          12

因为我不知道哪一个会从用户名或father_name或年龄或三者中得到。所以,如果我得到所有三个没有问题。但是当我得到单数或值数时,我需要搜索它。

是否有可能获得这些结果?

2 个答案:

答案 0 :(得分:2)

您似乎想要and而不是or,但由于您似乎并不关心name,这很复杂。我很想说:

SELECT *
FROM class
WHERE father_name REGEXP 'first|12' AND
      age REGEXP 'first|12';

我不确定name条款中WHERE正在做什么。

编辑:

我想要你想要最匹配的行。如果是这样的话:

SELECT *
FROM class
WHERE name REGEXP 'first|12' OR
      father_name REGEXP 'first|12' OR
      age REGEXP 'first|12'
ORDER BY ((name REGEXP 'first|12') + (father_name REGEXP 'first|12') + (age REGEXP 'first|12')) DESC
LIMIT 1;

答案 1 :(得分:2)

请注意,REGEXP 'xx|yy'表示this matches xx OR yy,因此您的结果对于该查询是正确的。

要获得您想要的结果,您必须澄清您想要达到的目标。我假设您想要以下内容:select all rows where the father is first AND age is 12

您可以使用以下方法实现此目的:

SELECT * FROM mytable WHERE father_name like 'first' AND age = 12;

您可以在此处尝试此解决方案:Relevant SqlFiddle

Edit1 :在OP发表更多评论后可能出现另类选择:

SELECT * FROM mytable WHERE 
father_name IN ('first', '12') AND age IN ('first', '12')
OR
father_name IN ('first', '12') AND name IN ('first', '12')
OR
name IN ('first', '12') AND age IN ('first', '12');

您可以在此处尝试此解决方案:Relevant SqlFiddle