0
$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]: Unable to save result set in C:\xampp\htdocs\search\news.php on line 131 子查询返回超过 1 行

谁能帮我从数据库中检索值...

4

4 回答 4

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'

作为旁注,SQL Injection如果值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-01-14T22:35:25.287 回答
0

使用 IN 运算符,如 place_id in(您的子查询在这里)

  $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());
于 2013-01-14T22:36:20.763 回答
0

其他答案是明智的,您可以做得比嵌套查询更好。

如果你真的想AND my_column_id = (SELECT something FROM ...) 确保子查询只返回一行,也许可以用LIMIT 0, 1.

于 2013-01-14T22:44:39.310 回答
0

改用使用mysqli_orPDO函数的准备好的语句。您的查询可以使用显式完成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'
于 2013-01-14T22:35:10.863 回答