我写了一个MySQL查询,但它似乎没有工作,因为结果是空的.我的代码中有错误吗?
$result = mysql_query(
"SELECT user_id
FROM wp_usermeta
WHERE
(meta_key = 'first_name' AND meta_value = '$us_name') AND
(meta_key = 'yearofpassing' AND meta_value = '$us_yearselect') AND
(meta_key = 'u_city' AND meta_value = '$us_reg') AND
(meta_key = 'us_course' AND meta_value = '$us_course')"
);
Run Code Online (Sandbox Code Playgroud)
fth*_*lla 50
我会用这个查询:
SELECT
user_id
FROM
wp_usermeta
WHERE
(meta_key = 'first_name' AND meta_value = '$us_name') OR
(meta_key = 'yearofpassing' AND meta_value = '$us_yearselect') OR
(meta_key = 'u_city' AND meta_value = '$us_reg') OR
(meta_key = 'us_course' AND meta_value = '$us_course')
GROUP BY
user_id
HAVING
COUNT(DISTINCT meta_key)=4
Run Code Online (Sandbox Code Playgroud)
这将选择user_id满足所有四个条件的所有条件.
Kov*_*vge 25
@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'
Run Code Online (Sandbox Code Playgroud)
其他的事情:建议使用预处理语句,因为mysql_*函数不是SQL注入保存,并且将被弃用.如果您希望尽可能少地更改代码,可以使用以下mysqli_函数:http:
//php.net/manual/en/book.mysqli.php
建议:
使用此表中的索引.user_id强烈推荐和索引,并建议成为meta_keyAND 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 |
+---------+---------------+-----------+
Run Code Online (Sandbox Code Playgroud)
与查询的结果$us_name='Kovge' $us_yearselect='2012' $us_reg='GaPa',$us_course='PHP':
+---------+
| user_id |
+---------+
| 1 |
+---------+
Run Code Online (Sandbox Code Playgroud)
所以它应该有效.
| 归档时间: |
|
| 查看次数: |
198012 次 |
| 最近记录: |