我正在尝试进行查询以返回4个表中的数据,当我尝试放置一些附加条件时就会出现问题。该查询可在没有条件的情况下使用LEFT JOIN处理4个表,但是当我将LIKE条件放入时,结果没有任何变化。结果必须是仅以40.95开头的带有“ lat”的选择
此代码有效:
if($resultset=getSQLResultSet("SELECT name, lat, lng, description,
COALESCE(section, 0), COALESCE(AVG(score), 0) FROM places P LEFT JOIN ratings R ON P.id=R.place LEFT JOIN ratings_sections RS ON R.id=RS.rating LEFT JOIN categories C ON P.type=C.type GROUP BY P.name, RS.section ORDER BY P.name, RS.section")){
while ($row = $resultset->fetch_array(MYSQLI_NUM)){
echo json_encode($row);
}
}
但是当我设置为LIKE条件时,什么都没有改变:
if($resultset=getSQLResultSet("SELECT name,lat, lng, description, COALESCE(section, 0), COALESCE(AVG(score), 0) FROM places P LEFT JOIN ratings R ON P.id=R.place AND P.lat LIKE '40.95%' LEFT JOIN ratings_sections RS ON R.id=RS.rating LEFT JOIN categories C ON P.type=C.type GROUP BY P.name, RS.section ORDER BY P.name, RS.section")){
while ($row = $resultset->fetch_array(MYSQLI_NUM)){
echo json_encode($row);
}
}
答案 0 :(得分:2)
您的第三个查询是错误的,因为您要对两个查询进行UNION
,其中第一个查询由四列组成,而第二个查询只有一列。
SELECT name, lat, lng, description
FROM places P, categories C
WHERE P.lat LIKE '40.96%'
OR lat LIKE '40.95%'
AND P.type=C.type
GROUP BY P.name
UNION
SELECT score
FROM ratings_sections RS, rating R
WHERE RS.rating=R.id
您的第四个查询也是错误的,例如,在这里:
LEFT JOIN GROUP BY P.name, RS.section ORDER BY P.name, RS.section
出于明显的原因,您不能在GROUP BY
内使用JOIN
子句。
答案 1 :(得分:1)
SQL UNION ALL运算符用于合并2个或更多SELECT语句的结果集。
SELECT name,lat, lng, description,... FROM
和
SELECT score FROM
不同