需要在一个字段Mysql中搜索两个值

时间:2013-11-28 08:13:47

标签: php mysql sql wordpress

我需要在同一个字段中搜索两个值。

╔════╦════════════╦══════════════╗
║ ID ║ Meta_key   ║ Meta_value   ║
╠════╬════════════╬══════════════╣
║  1 ║ first_name ║    pritesh   ║
║  2 ║ last_name  ║    mahajan   ║
║  3 ║ first_name ║    ritesh    ║
║  4 ║ last_name  ║    jain      ║
║  5 ║ first_name ║    john      ║
║  6 ║ last_name  ║    a         ║
║  7 ║ first_name ║    Mambo     ║
║  8 ║ last_name  ║    Nombo     ║
╚════╩════════════╩══════════════╝  

这是我的表,我想搜索所有的名字和姓氏。以下是我的查询,但这不会返回我想要的内容。

SELECT * 
FROM `wp_usermeta` 
WHERE `meta_key` = 'last_name' 
  AND `meta_value` LIKE  '%mahajan%' 
  AND `meta_key` = 'first_name' 
  AND `meta_value` LIKE  '%a%'; 

4 个答案:

答案 0 :(得分:2)

你能试试吗,

 SELECT * FROM `wp_usermeta` WHERE (`meta_key` = 'last_name' OR `meta_key` = 'first_name' ) and (`meta_value` LIKE  '%mahajan%' OR `meta_value` LIKE  '%a%')

答案 1 :(得分:2)

你去吧

SQL Fiddle

<强>查询

SELECT first_name, last_name
FROM 
  (
    (
      SELECT meta_value AS first_name, id AS a_id 
      FROM wp_usermeta 
      WHERE meta_name = 'first_name'
    ) as a
  )
JOIN
  (
    (
      SELECT meta_value AS last_name, id AS b_id 
      FROM wp_usermeta 
      WHERE meta_name = 'last_name'
    ) as b
  )
WHERE a_id = b_id-1

<强> Results

| FIRST_NAME | LAST_NAME |
|------------|-----------|
|    pritesh |   mahajan |
|     ritesh |      jain |
|       john |         a |
|      Mambo |     Nombo |

有了这个,您可以使用两个虚拟列first_namelast_name轻松搜索。您只需要为WHERE子句添加其他条件。像这样的东西:

  WHERE a_id = b_id-1
  AND first_name LIKE "%tesh%"
  AND last_name LIKE "%jai%"

将产生

| FIRST_NAME | LAST_NAME |
|------------|-----------|
|     ritesh |      jain |

注意

我在这里做的一个重要假设(基于您的示例数据)是相关 first_namelast_name总是会连续id的。 (表中连续两条记录)。

答案 2 :(得分:0)

我认为这两行必须共享相同的密钥。也许它是IDuser_id(未在您的问题中显示?)。如果是这种情况,您可以使用此查询返回您要查找的ID:

SELECT ID
FROM `wp_usermeta`
WHERE
  (`meta_key` = 'last_name' AND `meta_value` LIKE  '%mahajan%')
  OR (`meta_key` = 'first_name' AND `meta_value` LIKE  '%a%)
GROUP BY ID
HAVING COUNT(*)=2

请将ID替换为实际ID。

答案 3 :(得分:0)

模式

CREATE TABLE wp_usermeta 
    (
     id int auto_increment primary key, 
     meta_name varchar(20), 
     meta_value varchar(30)
    );

INSERT INTO wp_usermeta
(meta_name, meta_value)
VALUES
('first_name', 'pritesh'),
('last_name', 'mahajan'),
('first_name', 'ritesh'),
('last_name', 'jain'),
('first_name', 'john'),
('last_name', 'a'),
('first_name', 'Mambo'),
('last_name', 'Nombo'); 

查询应该是这样的....

SELECT meta_name, meta_value
FROM wp_usermeta
WHERE 
(meta_name = 'last_name' AND meta_value LIKE  '%mahajan%' )
  OR
(meta_name = 'first_name' AND meta_value LIKE  '%a%');