2011-08-07 16 views
3

こんにちは私は正しく動作するようにmysqlクエリを取得しようとしていますが、正直なところ私はカウント関数がうまく動作しません。少なくともx個の行を取得する

私がしようとしているのは、5つまでの行が5つに達するまで、別のクエリ/ where句を使って結合よりも数えている場合です。

そこで、基本的

$myquery_mysql = mysql_query("(SELECT title, city, ad_image, rent, uniqid FROM rentals WHERE front_page_ad = '1' AND paid = '1' AND city = '".mysql_real_escape_string($GLOBALS['user_city'])."') 
    UNION ALL 
    (SELECT title, city, ad_image, rent, uniqid FROM rentals WHERE front_page_ad = '1' AND paid = '1' AND province = '".mysql_real_escape_string($GLOBALS['user_province'])."') 
    UNION ALL 
    (SELECT title, city, ad_image, rent, uniqid FROM rentals WHERE front_page_ad = '1' AND paid = '1')" or die(mysql_error()); 

少なくとも5行を移動して、5以上に到達するまでの行を結合し続ける...

は、私はこのISNを知っているような...

  $myquery_mysql = mysql_query("(SELECT title, city, ad_image, rent, uniqid count(if title > 5) THEN FROM rentals WHERE front_page_ad = '1' AND paid = '1')" 
    UNION ALL 
    (SELECT title, city, ad_image, rent, uniqid FROM rentals WHERE front_page_ad = '1' AND paid = '1' AND province = '".mysql_real_escape_string($GLOBALS['user_province'])."') 
    ELSE FROM rentals WHERE front_page_ad = '1' AND paid = '1')" END ; 

or die(mysql_error()); 

何かをするだろう私はそれを理解しようとしています。

答えて

2

最後にLIMIT 5を追加すると、すべてのユニオンでクエリ全体が実行され、上位5つの結果が選択されます。ただし、ORDER BYを指定しない限り、あなたの組合を命じる。

最初のクエリに5つの結果がある場合は、それらの値を取るだけですが、そうでなければ、次の2つの結合から結果が得られます。あなたの組合が時間を浪費していない限り、これは良い行動のようです。

私は思い
+0

私はそれを考えていましたが、すべてのクエリを選択する必要があります.13がある場合は、13個すべてが必要です。thnaks – Tianbo84

+0

ああ、私の間違いです。私はそれを行うエレガントな方法があるかどうかわかりません。最悪の場合、最初にクエリを実行してそのような結果の数を数え、5未満の場合は自分の方法を使用します。すべての都市と都道府県を選択するだけです。 –

+0

ああ、私はこれを行う方法がないかもしれないと思っていた。私の新しい方法では、 '' $ city_num_rows = mysql_num_rows($ myquery_mysql); if($ city_num_rows <5){// do here} 'のようなものになると思います。 – Tianbo84

0

  • は比較による
  • 注文はdescので、一致する値が使用
  • nullになる)非マッチングより高次値すべての比較を使用して参加を残しました制限5
関連する問題