2013-11-28 3 views
2

Мне нужно найти два значения в одном поле.Нужно найти два значения в одном поле Mysql

╔════╦════════════╦══════════════╗ 
║ 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%'; 
+3

У вас есть несколько имен и фамилий, но как первое имя и фамилия связано для одного человека? –

+1

Запрос не может работать, потому что вы ищете строку, которая имеет для столбца «Meta_Key» значение 'first_name' * и *' last_name' в одно и то же время. Похоже, что некорректная структура таблицы, поскольку firstnames и lastnames не связаны друг с другом. – Matten

+0

да если возможно, поэтому, пожалуйста, проверьте Wordpress usermeta table. –

ответ

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 | 

С Тхи s, вы можете легко выполнить поиск с использованием двух виртуальных столбцов 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. (две последовательные записи в таблице).

+0

не могли бы вы сообщить мне еще одно, как добавить новое соединение, потому что я хочу добавить новое соединение для ID электронной почты. Идентификатор электронной почты из другой таблицы, и мы будем использовать идентификатор существующей таблицы для получения идентификатора электронной почты. –

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%') 
+0

Ваше условие: «first_name =% mahajan% или first_name =% a% или last_name =% mahajan% или last_name =% a%» в вышеуказанном запросе. Я не думаю, что это то, чего хочет опера. – Matten

+0

Вы отлично :) (party) –

+0

Этот запрос работает, но когда последнее имя получает, оно не будет искать по имени, потому что мы используем условие ИЛИ. –

0

Я думаю, что обе строки должны разделять один и тот же ключ. Может быть, это ID, или user_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 с действительным идентификатором.

+0

Как именно 'meta_key' будет как' first_name', так и 'last_name 'для той же строки? Возможно, вы хотели поставить 'OR' между parens. не 'AND'. –

+3

Тогда id не является первичным ключом. Действительно ли это так? Очень небрежная схема БД со своей стороны. –

+0

WP отстой, если честно .... -_- – itachi

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%'); 
Смежные вопросы