0

現在、MySQL 内でこのクエリを実行して、指定された値がそれらに関連付けられたテーブル内に存在するかどうかを確認しています。

SELECT COUNT(artist.artist_id), COUNT(album.album_id), COUNT(tracks.track_id) 
FROM artist, album, tracks WHERE artist.artist_id = 320295 OR album.album_id = 1234 OR tracks.track_id = 809

このクエリの実行結果はすべて 1 です。これは、WHERE 句の後のすべてのステートメントが true であることを意味します。クエリの信頼性をさらに確認するために、tracks.track_ = 809 を 802 に変更しましたが、一致しないことがわかっています。ただし、表示される結果はすべて 1 のままです。つまり、意図的に一致しない値を挿入した場合でも、すべて正常に一致したことを意味します。

同じクエリ内で一致する場合は 1 を表示し、一致しない場合は 0 を表示するにはどうすればよいですか?

編集:実行中のクエリの画像を挿入しました

ここに画像の説明を入力

4

2 に答える 2

0

ここで「または」句が問題になる場合があります。これらの WHERE 句のいずれかが機能する場合、空ではない結果セットが得られます。SELECT COUNT(*)... WHERE... AND... AND... のようなものかもしれません。

しかし、PHP コード セット全体を参照する方が役に立ちます。また、3 つの異なるクエリを実行することをお勧めします。これは、技術的に洗練されているからではなく、最初から正しく機能させる方が簡単だからです。

于 2012-12-16T23:00:30.500 に答える
0

ここで行うのは、3 つのテーブルの結合です。このSQL Fiddleを見ると、何が起こるかがわかります。

最初の選択ではcount、結合がどのように機能するかを示すために、を省略しました。@RayPaseur が提案したように where 句をorto に変更すると、結果セットがどのように変化するかを確認することもできます。and

あなたが望むのは、実際には3つの別々のクエリだと思います

select 'artist' as type, count(artist_id) as count
from artist
where artist_id = 320295
union
select 'album', count(album_id)
from album
where album_id = 1234
union
select 'track', count(track_id)
from tracks
where track_id = 809

なる

TYPE    COUNT
artist  1
album   1
track   1

に変更track_id = 809するとtrack_id = 802、次のようになります。

TYPE    COUNT
artist  1
album   1
track   0

結果として。

再生用のSQL Fiddle 。

于 2012-12-16T23:11:39.163 に答える