使用LEFT JOIN和LIKE条件的MySQL查询未显示我的预期

时间:2018-08-16 11:36:56

标签: php mysql sql left-join sql-like

我正在尝试进行查询以返回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);
    }
}

Result of the query

2 个答案:

答案 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

不同