2011-08-07 49 views
3

嗨我想獲得一個MySQL查詢正常工作,但說實話林不知道從哪裏開始,我認爲計數功能將工作,但不知道。在MySQL中獲取至少x行數

我想要做的是做一個選擇,但如果有少於5行計數比與另一個查詢/ where子句聯合,直到達到5。

所以基本上走至少5行,並保持連接行,直到5個以上達到...

$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()); 

我會做這樣的事情......

  $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()); 

我知道這ISN沒錯,但我只是想弄明白。

回答

2

您可以在最後添加一個LIMIT 5,因此它會對所有聯合執行整個查詢,然後選擇前5個結果,只要您沒有給它一個ORDER BY,它應該在命令你做你的工會。

因此,如果第一個查詢有5個結果,它只會採取這些,但如果沒有,它會從接下來的2個聯合結果中獲得結果。只要你的工會不費時,這似乎是一個很好的行動。

+0

我在想,但我需要選擇所有的查詢,所以如果有13我需要所有13,thnaks – Tianbo84

+0

哦,我明白了,我的錯誤。我不知道是否有一個優雅的方式來做到這一點。在最糟糕的情況下,您可以首先進行查詢以計算有多少這樣的結果,如果少於5,則使用我的方法,如果不是,則只需選擇所有城市和省份的結果。 –

+0

啊我在想可能沒有辦法做到這一點。我的新方式,然後我猜會像'代碼$ city_num_rows = mysql_num_rows($ myquery_mysql);如果($ city_num_rows <5){//在這裏執行}'' - 謝謝 – Tianbo84

0

我會怎麼做:

  • 左連接上使用所有比較
  • 爲了通過比較值desc所以匹配值的順序不匹配的高(這將是null
  • 使用限制5