3

嗨,我正在尝试让 mysql 查询正常工作,但老实说,我不确定从哪里开始,我认为 count 函数可以工作,但不确定。

我想要做的是做一个选择,但如果计数少于 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());

我知道这是不对的,但我只是想弄清楚。

4

2 回答 2

2

您可以LIMIT 5在最后添加 a ,因此它将对所有联合执行整个查询,然后选择前 5 个结果,只要您不给它一个 ORDER BY 它应该按照您执行联合的顺序列出它们.

因此,如果第一个查询有 5 个结果,它将只获取这些结果,但如果没有,它将从接下来的 2 个联合中获取结果。只要您的工会不是很耗时,这似乎是一个很好的行动方案。

于 2011-08-07T01:35:10.880 回答
0

我会做:

  • 使用所有比较离开加入
  • 按比较值排序,desc因此匹配值的顺序高于非匹配值(将是null
  • 使用限制 5
于 2011-08-07T01:43:41.927 回答