0

データがクエリと一致しない場合でも、MySQL は常に「デフォルト応答」を送信します。

クエリに一致するデータがない場合、MySQL からエラー コードを取得するようにクエリを設計するにはどうすればよいですか?

404 または 410 ページを作成するには、MySQL からのエラー コードが必要です。

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

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 に答える
0

はい、それが SQL の仕組みです。クエリに一致する行がない場合、結果セットは空になります。「行がない」場合に応答し、応答ステータスを (404 または何に) 変更するために SQL クエリが埋め込まれているプログラム (PHP または何を持っている) の仕事です。SQL クエリは、HTTP ステータス コードに責任を負いません。それはチョーク アンド チーズです。

于 2013-03-19T20:52:48.773 に答える