2012-03-12 15 views
0

私はテーブルがあります。MySQLの二重のクエリ要求

table_1 
id time 
1 2012-03-05 12:50:00 
2 2012-03-05 12:51:00 
3 2012-03-05 12:52:00 
4 2012-03-05 12:53:00 

table_2 
userid level 
100  1 
256  2 
112  3 
400  2 
15  1 

まず要求:

$sql = 'SELECT `id`, `time` FROM table_1 WHERE `time` > NOW() ORDER BY `id` DESC LIMIT 1'; 

2番目のリクエスト:

$sql = 'SELECT COUNT(*) FROM table_2 WHERE `userid` = 100 LIMIT 1'; 

つの要求にこれら2つの要求を結合する方法を?例えば

この表:

id time    count 
1 2012-03-05 12:53:00 1 

それとも

id time    count 
1 2012-03-05 12:53:00 0 

我々はtable_2 おかげで何のすべてのレコードを持っていない場合は!

+0

2つの全く関係のない質問を結合して、なぜ始めるのはなぜですか?より良いパフォーマンスをお探しですか? –

+0

はい。よりよい性能。 – user889349

+0

テーブルは関連していません。 – user889349

答えて

0

彼らは決して関連していないので、シンプルだがブルートフォースだから、私はこれをやるだろう。実用的ではないが、それを行うだろう。

SELECT 
     `id`, 
     `time`, 
     (select COUNT(*) 
      FROM table_2 
      WHERE `userid` = 100) as UserCount 
    FROM 
     table_1 
    WHERE 
     `time` > NOW() 
    ORDER BY 
     `id` DESC 
    LIMIT 1 
+0

上記の要件であるかどうかは不明ですが、 'time'エントリがない場合は結果を返さないことに注意してください(NOW() –

+0

@JoachimIsaksson、正しいですが彼らが何とかしたいものの文脈では、行を返さないとどちらかで失敗する可能性があります。しかし、FIELD selectは2つのカラムを返すことができないので、もう一方のカラムの前に置く必要がありました。 – DRapp

0

2つの非常に単純で無関係なクエリを1つのより複雑なものに組み合わせることは、パフォーマンスを得るための最良の方法ではありません。あなたはかもしれません少し往復から少しブーストを得るが、クエリはすぐにunmaintainableになるでしょう。

代わりに、余分な往復時間を避けるには、mysqli::multi_queryのようなものを使用して、両方を同時にデータベースに送信してください。つまり、クエリを単純にしておけば、データベースへのラウンドトリップは1回だけです。

+0

ダウンボトムについて不思議に思うと、私は間違っていることが判明してうれしいですが、私は誰かが同意しない以上のことを知りたいと思います。 –

関連する問題