0

即使数据与查询不匹配,MySQL 也会始终发送“默认响应”!

如果没有数据与查询匹配,我如何设计查询以从 MySQL 获取错误代码?

我需要来自 MySQL 的错误代码来创建 404 或 410 页面。

SELECT
place.ID AS id,
place.latitude AS lat,
place.longitude AS lng,

IF(
place.translationID IS NULL,
place.name,
placel10n.text
) AS cityname,

IF(
admcode.translationID IS NULL,
'',
statel10n.text
) AS statename,

IF (  
countrycode.translationID IS NULL,
countrycode.name,
countryl10n.Text
) AS countryname,

IF(
place.textID IS NULL,
'',
`l10n-strings`.text
) AS description

FROM
places AS place

LEFT JOIN `l10n-strings` AS placel10n ON (place.translationID = placel10n.translationID         AND placel10n.languageCode = 'de')
LEFT JOIN admin1codesascii AS admcode ON (place.admin1 = admcode.statecode AND     place.country = admcode.country)
LEFT JOIN `l10n-strings` AS statel10n ON (admcode.translationID =    statel10n.translationID AND statel10n.languageCode = 'de')
LEFT JOIN countries AS countrycode ON (place.country = countrycode.iso_alpha2)
LEFT JOIN `l10n-strings` AS countryl10n ON (countrycode.translationID =    countryl10n.TranslationID AND countryl10n.LanguageCode = 'de')

LEFT JOIN texts ON (place.textID = texts.id)
LEFT JOIN `l10n-strings` ON (texts.translationID = `l10n-strings`.translationID AND    `l10n-strings`.languageCode= 'de')

WHERE
place.id = '8'
AND
place.featurecode = 'A'
OR
place.featurecode = 'AB'
OR
place.featurecode = 'AAC'

LIMIT 0,1

即使where语句错误,此查询也始终返回结果。

4

2 回答 2

0

是的,这就是 SQL 的工作方式。如果没有与您的查询匹配的行,则结果集将为空。这是嵌入 SQL 查询以响应“无行”情况并更改响应状态(更改为 404 或您有什么)的程序的工作(用 PHP 编写或您有什么)。SQL 查询不对 HTTP 状态代码负责——它是粉笔和奶酪。

于 2013-03-19T20:52:48.773 回答
0

在 MySQL 中,AND 的运算符优先级高于 OR,因此 WHERE 子句中的条件将被解释为

(place.id = '8' AND place.featurecode = 'A') OR
place.featurecode = 'AB' OR 
place.featurecode = 'AAC'

使用括号来明确说明您想要的操作顺序。也许你是这个意思?

place.id = '8' AND 
   (place.featurecode = 'A' OR 
    place.featurecode = 'AB' OR 
    place.featurecode = 'AAC')
于 2013-03-20T01:13:11.103 回答