我需要在同一个字段中搜索两个值。
╔════╦════════════╦══════════════╗
║ 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%';
答案 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)
你去吧
<强>查询强>:
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_name
和last_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_name
和last_name
总是会连续id
的。 (表中连续两条记录)。
答案 2 :(得分:0)
我认为这两行必须共享相同的密钥。也许它是ID
或user_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%');