2013-04-04 5 views
5

audio列のすべての行が空であれば条件を切り替えたいです。私はGROUP BY型で試してみましたが動作しません。だから、MySQL:値がある行がある場合は、列全体を確認してください

SELECT postid, title, has_audio, audio, type 
    FROM qa_posts 
    WHERE parentid=1 

enter image description here

オーディオもしあなたがコードBに比べていない場合は、コードAを実行している親IDの列全体のためにaudioNULLされていないだけでcountすべての行を

答えて

6

を可能性が存在します。しかし、あなたのテーブルが大きくて、たくさんの行を含んでいるなら、このアプローチの実際の問題は、このようなクエリはDBにとっては高価で、少なくともそれよりも遅くなる可能性があるということです。もちろん、時期尚早の最適化は悪いことではあるが、これはそうではありません - 私たちはアプローチを最適化しようとしている、いないコード:)

はオーディオ列にすべての行が空の場合は条件付きで切り替えたい

まず、質問are all rows' audio column empty?を本当に正しいものと考えるとよいでしょう。そして、いいえ。実際にあなたはhow many of rows are not nullでもare all rows' audio column empty?でも知っている必要はありません。完全にの場合、5,10,100,000の場合は無関係です。あなたは何をしなければならないのですか?質問をフリップし、if there's any row that is NOT null?のような質問に対する答えを探します。一見すると両方の質問が似ていますが、答えを得るためにデータベースを使用しているので、これは実際にゲームチェンジャー全体です。ロジックによって

audioNOT NULLされている場合があり少なくとも一つ行を見つけるためにちょうど十分であるif there's any row that is NOT null?質問に答えます。少なくとも少なくとも1つの条件を満たすために、1はSQL LIMIT 1を使用します。これにより、DBが停止し、最初のレコードが見つかるとすぐに結果が返されます。クエリ、全体のテーブルを通過する必要があります。これは、単純にすばやく、リソースが不足する必要があります。

実行すると、クエリは2つの結果を返すことができます。私たちは何も得られません(ゼロ行が返されます)。これは、audioのすべてがNULLであるか、逆に、if there's any row that is NOT null?質問への回答が 'はい、それです(少なくとも返されたものがあるため)です。

+0

しかし、この画像では、わずか3行のようなNOT NULL行の簡単なチェック...何その場合にはできますか?私は、親IDのオーディオフィールドが利用可能かどうかをチェックしたいだけです。単一のフィールドがnullでない場合、trueを返す必要があります。なにか提案を? – Artist

+0

あなたの選択結果を親IDを 'WHERE parentid = 1'と共有する行に絞り込みます。 –

+0

WebnetMobileは大丈夫です。私のものよりも良い答え。このような小さなものであっても、サーバーの負荷を最小限に抑えることにベストを尽くして、その習慣を身につけてください。 –

2

WHERE audio != nullの場合はselect count(*)のselect文を実行します。次に、受信した番号に基づいて条件文を実行します。オーディオのインデックスが作成されていることを確認します。

+0

これは良いアイデア..カウントが真実よりも> 0を意味する..右ですか? – Artist

+0

これは悪いアプローチです - なぜ私は答えを書き留めましたか? –

+0

私は見ているが、私はちょうど2つの条件と実際のカウントではない値またはnullを持っているいずれかのフィールドをチェックしたい。 'if(audio == 0){何もしない} else {これを行う}'のように – Artist

1

あなたは10または15以上の可能性があり

SELECT * FROM `table` WHERE column IS NOT NULL AND column <> '' 
関連する問題