Rozwiązanie @fthiella jest bardzo eleganckie.
Jeśli w przyszłości chcesz pokazać więcej niż user_id
możesz użyć złączeń, a tam w jednym wierszu mogą być wszystkie potrzebne dane.
Jeśli chcesz użyć AND
warunki, a warunki są w wielu wierszach w tabeli, można użyć JOINS
przykład:
SELECT `w_name`.`user_id`
FROM `wp_usermeta` as `w_name`
JOIN `wp_usermeta` as `w_year` ON `w_name`.`user_id`=`w_year`.`user_id`
AND `w_name`.`meta_key` = 'first_name'
AND `w_year`.`meta_key` = 'yearofpassing'
JOIN `wp_usermeta` as `w_city` ON `w_name`.`user_id`=`w_city`.user_id
AND `w_city`.`meta_key` = 'u_city'
JOIN `wp_usermeta` as `w_course` ON `w_name`.`user_id`=`w_course`.`user_id`
AND `w_course`.`meta_key` = 'us_course'
WHERE
`w_name`.`meta_value` = '$us_name' AND
`w_year`.meta_value = '$us_yearselect' AND
`w_city`.`meta_value` = '$us_reg' AND
`w_course`.`meta_value` = '$us_course'
Inna sprawa: zaleca się stosowanie przygotowanych sprawozdań, ponieważ mysql_*
funkcji nie jest Wstrzyknięcie SQL zapisuje i będzie przestarzałe. Jeśli chcesz zmienić swój kod Im mniej, jak to możliwe, można użyć mysqli_
funkcje: http://php.net/manual/en/book.mysqli.php
Zalecenie:
używających indeksów w tabeli. user_id
bardzo polecam być i indeksować, i polecam być również meta_key
i meta_value
, aby przyspieszyć uruchomienie zapytania.
wyjaśniania:
Jeśli używasz AND
you 'podłączyć' warunki dla jednej linii. Jeśli więc chcesz warunek AND dla wielu linii, najpierw musisz utworzyć jedną linię z wielu linii, tak jak to.
Testy: Tabela danych:
PRIMARY INDEX
int varchar(255) varchar(255)
/ \ |
+---------+---------------+-----------+
| user_id | meta_key | meta_value|
+---------+---------------+-----------+
| 1 | first_name | Kovge |
+---------+---------------+-----------+
| 1 | yearofpassing | 2012 |
+---------+---------------+-----------+
| 1 | u_city | GaPa |
+---------+---------------+-----------+
| 1 | us_course | PHP |
+---------+---------------+-----------+
wynikiem frazę $us_name='Kovge'
$us_yearselect='2012'
$us_reg='GaPa'
, $us_course='PHP'
:
+---------+
| user_id |
+---------+
| 1 |
+---------+
więc powinien to działa.
Jak można się spodziewać, że ta sama kolumna ('meta_key') ma wiele różnych wartości jednocześnie? [** Proszę, nie używaj funkcji 'mysql_ *' w nowym kodzie **] (http://bit.ly/phpmsql). Nie są już utrzymywane [i są oficjalnie przestarzałe] (https://wiki.php.net/rfc/mysql_deprecation). Zobacz [** czerwone pudełko **] (http://j.mp/Te9zIL)? Dowiedz się więcej o [* przygotowanych wyciągach *] (http://j.mp/T9hLWi) i użyj [PDO] (http://php.net/pdo) lub [MySQLi] (http://php.net/ mysqli) - [ten artykuł] (http: // j.mp/QEx8IB) pomoże ci zdecydować, który. Jeśli wybierzesz PDO, [tutaj jest dobry samouczek] (http://j.mp/PoWehJ). – DCoder