查询多个mysql行并分成变量后?

时间:2011-03-14 22:32:13

标签: php mysql

我只是想知道是否有更好的方法来执行以下代码...我有一个表永远不会有超过1000行,平均有300行。

$largeside_mysql = mysql_query("(SELECT url, image FROM advert WHERE placement = 'largeside' AND paid = 'complete' AND city = '{$GLOBALS['user_city']}' ORDER BY RAND() LIMIT 3)
UNION ALL
(SELECT url, image FROM advert WHERE placement = 'largeside' AND paid = 'complete' AND province = '{$GLOBALS['user_province']}' 'city' != '{$GLOBALS['user_city']}' ORDER BY RAND() LIMIT 3)
UNION ALL
(SELECT url, image FROM advert WHERE placement = 'largeside' AND paid = 'complete' AND 'province' != '{$GLOBALS['user_province']}' 'city' != '{$GLOBALS['user_city']}' ORDER BY RAND() LIMIT 3)
UNION ALL
(SELECT url, image FROM advert WHERE user='1' AND uniqid='largeside' ORDER BY RAND() LIMIT 3)
 LIMIT 3 ") or die(mysql_error());
    $GLOBALS['largeside'] = array();
    while($row = mysql_fetch_assoc($largeside_mysql)) {
    $GLOBALS['largeside'][] = $row;
    }

我花了一些时间阅读,但我已经开始工作了,基本上它传递了全局变量以供页面加载时使用。

我想计算在一个查询中找到的行,然后如果未达到限制,则执行另一个查询以添加其他行,直到达到LIMIT。大多数情况下,第一个查询会找到足够的行,但奇数时间需要添加一些。

我想知道这是否是表格大小和我需要做的最佳解决方案。

非常感谢,

1 个答案:

答案 0 :(得分:0)

$largeside_mysql = mysql_query("
select url, image
from
(
    SELECT url, image, 0 as n
    FROM advert 
    WHERE placement = 'largeside' AND paid = 'complete' AND city = '{$GLOBALS['user_city']}'

    UNION ALL
    SELECT url, image, 1 as n
    FROM advert 
    WHERE placement = 'largeside' AND paid = 'complete' AND province = '{$GLOBALS['user_province']}' 'city' != '{$GLOBALS['user_city']}'

    UNION ALL
    SELECT url, image, 2 as n
    FROM advert 
    WHERE placement = 'largeside' AND paid = 'complete' AND 'province' != '{$GLOBALS['user_province']}' 'city' != '{$GLOBALS['user_city']}'

    UNION ALL
    SELECT url, image, 3 as n
    FROM advert 
    WHERE user='1' AND uniqid='largeside'
)
order by n, rand()
LIMIT 3 "
) or die(mysql_error());
$GLOBALS['largeside'] = array();
while($row = mysql_fetch_assoc($largeside_mysql)) {
$GLOBALS['largeside'][] = $row;
}