@fthiella的解決方案非常優雅。
如果將來您想要顯示超過user_id
您可以使用連接,並且在一行中可能是您需要的所有數據。
如果你想使用AND
條件,而條件是在你的表多行,可以用JOINS
例如:
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'
其他的事情:推薦使用準備好的語句,因爲mysql_*
功能不SQL注入保存,並將被棄用。 如果你想改變你的代碼儘可能少,你可以使用mysqli_
功能: http://php.net/manual/en/book.mysqli.php
建議:
在此表中使用索引。 user_id
強烈建議是和索引,並且也推薦爲meta_key
和meta_value
,以便更快地運行查詢。
的解釋:
如果使用AND
你一條線「連接」的條件。所以,如果你想要多行的AND條件,首先你必須從多行創建一行,就像這樣。
測試: 表數據:
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 |
+---------+---------------+-----------+
查詢與$us_name='Kovge'
$us_yearselect='2012'
$us_reg='GaPa'
,$us_course='PHP'
結果:
+---------+
| user_id |
+---------+
| 1 |
+---------+
所以它應該工作。
您如何期望同一列('meta_key')同時具有多個不同的值? [**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http:// j。mp/QEx8IB)將幫助您決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – DCoder 2013-04-27 08:01:36