La soluzione di @fthiella è molto elegante.
Se in futuro si desidera visualizzare più di user_id
, è possibile utilizzare join e in una riga potrebbero essere tutti i dati necessari.
Se si desidera utilizzare AND
condizioni, e le condizioni sono in più righe nella tabella, è possibile utilizzare JOINS
esempio:
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'
Altra cosa: consiglia di utilizzare le istruzioni preparate, perché mysql_*
funzioni non è SQL injection save, e sarà deprecato. Se si desidera modificare il codice meno possibile, è possibile utilizzare mysqli_
funzioni: http://php.net/manual/en/book.mysqli.php
Raccomandazione:
utilizzare gli indici in questa tabella. user_id
consiglia vivamente di essere e indicizzare, e consiglia di essere il meta_key
E meta_value
troppo, per eseguire una query più veloce.
La spiegare:
Se si utilizza AND
si 'collega' le condizioni per una riga. Quindi, se si desidera che la condizione AND per più righe, in primo luogo è necessario creare una linea da più righe, come questo.
Test: Tabella dati:
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 |
+---------+---------------+-----------+
il risultato della query con $us_name='Kovge'
$us_yearselect='2012'
$us_reg='GaPa'
, $us_course='PHP'
:
+---------+
| user_id |
+---------+
| 1 |
+---------+
Così dovrebbe opere.
Come ti aspetti che la stessa colonna ('meta_key') abbia più valori diversi allo stesso tempo? [** Per favore, non usare le funzioni 'mysql_ *' nel nuovo codice **] (http://bit.ly/phpmsql). Non sono più mantenuti [e sono ufficialmente deprecati] (https://wiki.php.net/rfc/mysql_deprecation). Vedi la [** red box **] (http://j.mp/Te9zIL)? Scopri invece [* prepared statements *] (http://j.mp/T9hLWi), e usa [PDO] (http://php.net/pdo) o [MySQLi] (http://php.net/ mysqli) - [questo articolo] (http: // j.mp/QEx8IB) ti aiuterà a decidere quale. Se scegli PDO, [ecco un buon tutorial] (http://j.mp/PoWehJ). – DCoder