$raw_results=mysql_query("SELECT resort_name FROM resorts WHERE resort_id=(SELECT resort_id FROM resort_place WHERE place_id=(SELECT place_id FROM place WHERE place='$query')) ") or die(mysql_error());
$check_num_rows=mysql_num_rows($raw_results);
$solutions = array();
while($row = mysql_fetch_assoc($raw_results)) {
$solutions[] = $row['solution'];
}
这是我的代码,它会返回错误消息,如
警告:mysql_query()[function.mysql-query]:无法在第131行的C:\ xampp \ htdocs \ search \ news.php中保存结果集 子查询返回超过1行
任何人都可以帮我从数据库中检索值......
答案 0 :(得分:1)
这会产生与多个子查询相同的结果。
SELECT DISTINCT a.resort_name
FROM resorts a
INNER JOIN resort_place b
ON a.resort_id = b.resort_id
INNER JOIN place c
ON b.place_id = c.place_id
WHERE c.place='$query'
作为旁注,如果值( s )来自外部,则查询容易被SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
答案 1 :(得分:0)
使用mysqli_
或PDO
函数来使用预准备语句。您的查询可以使用明确的JOIN
:
SELECT DISTINCT resorts.resort_name
FROM resorts
JOIN resort_place ON resort_place.resort_id = resorts.resort_id
JOIN place ON place.place_id = resort_place.place_id
WHERE place.place = '$query'
答案 2 :(得分:0)
使用IN运算符,例如place_id(在此子查询中)
$raw_results=mysql_query("SELECT resort_name FROM resorts WHERE resort_id IN
(SELECT resort_id FROM resort_place WHERE place_id IN
(SELECT place_id FROM place WHERE place='$query')
)
") or die(mysql_error());
答案 3 :(得分:0)
其他答案是明智的,你可以比嵌套查询更好。
如果你真的想做AND my_column_id = (SELECT something FROM ...)
确保子查询只返回一行,可以用LIMIT 0, 1
结束。