giải pháp của @fthiella rất thanh lịch.
Nếu trong tương lai bạn muốn hiển thị nhiều hơn user_id
bạn có thể sử dụng kết nối và trong một dòng có thể là tất cả dữ liệu bạn cần.
Nếu bạn muốn sử dụng AND
điều kiện và điều kiện là trong nhiều dòng trong bảng của bạn, bạn có thể sử dụng JOINS
dụ:
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'
điều khác: Đề nghị cho sử dụng chuẩn bị phát biểu, vì mysql_*
chức năng không phải là Lưu SQL injection và sẽ không được dùng nữa. Nếu bạn muốn thay đổi mã của bạn càng ít càng tốt, bạn có thể sử dụng chức năng mysqli_
: http://php.net/manual/en/book.mysqli.php
Khuyến nghị:
Sử dụng chỉ số trong bảng này. user_id
khuyên bạn nên là chỉ số và chỉ mục, đồng thời cũng khuyên bạn nên là meta_key
VÀ meta_value
để chạy nhanh hơn truy vấn.
Các giải thích:
Nếu bạn sử dụng AND
bạn 'kết nối' các điều kiện cho một dòng. Vì vậy, nếu bạn muốn và điều kiện cho nhiều dòng, trước tiên bạn phải tạo một dòng từ nhiều dòng, như thế này.
Các xét nghiệm: Bảng dữ liệu:
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 |
+---------+---------------+-----------+
Kết quả của truy vấn với $us_name='Kovge'
$us_yearselect='2012'
$us_reg='GaPa'
, $us_course='PHP'
:
+---------+
| user_id |
+---------+
| 1 |
+---------+
Vì vậy, nó nên tác phẩm.
Bạn mong đợi cùng một cột ('meta_key') có nhiều giá trị khác nhau cùng một lúc như thế nào? [** Xin vui lòng, không sử dụng các hàm 'mysql_ *' trong mã mới **] (http://bit.ly/phpmsql). Chúng không còn được duy trì [và được chính thức ngừng sử dụng] (https://wiki.php.net/rfc/mysql_deprecation). Xem [** hộp màu đỏ **] (http://j.mp/Te9zIL)? Tìm hiểu về [* statement statements *] (http://j.mp/T9hLWi) thay vào đó, và sử dụng [PDO] (http://php.net/pdo) hoặc [MySQLi] (http://php.net/ mysqli) - [bài viết này] (http: // j.mp/QEx8IB) sẽ giúp bạn quyết định cái nào. Nếu bạn chọn PDO, [đây là hướng dẫn tốt] (http://j.mp/PoWehJ). – DCoder