2011-08-07 50 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