0

我的 ads_man 表具有以下结构;

ads_man 表结构

如果“旋转”列为 1,我想从该表中随机选择行,否则如果旋转 = 0,则不应随机选择这些行。我试过这个;

$query = $db->query("
    SELECT type,place,code
    FROM ads_man
    WHERE approved = '1' AND fid = '{$fid}' AND place = '{$zone}'
    ORDER BY RAND()
    LIMIT 3");

它随机选择行,但问题是我找不到快速选择这些行的方法,而是使用另一个查询来查找所有具有 rotate = 1 的行,然后ORDER BY RAND()在上述查询中使用。

请帮忙!

4

4 回答 4

3
$query = $db->query("
    SELECT type,place,code
    FROM ads_man
    WHERE rotate='1' AND approved = '1' AND fid = '{$fid}' AND place = '{$zone}'
    ORDER BY RAND()
    LIMIT 3");
于 2013-10-17T06:31:10.380 回答
2

做这件事有很多种方法:

目前还不是很清楚你需要什么,但是,如果你需要rotate = 1随机选择 3 行,然后是其他行(例如 7 行),rotate = 0那么你可以用UNION

(SELECT type,place,code
    FROM ads_man
    WHERE rotate = 1 AND approved = '1' AND fid = '{$fid}' AND place = '{$zone}'
    ORDER BY RAND()
    LIMIT 3)
UNION
(SELECT type,place,code
    FROM ads_man
    WHERE rotate = 0 AND approved = '1' AND fid = '{$fid}' AND place = '{$zone}'
    LIMIT 7)

这是你需要的吗?如果没有,请告诉我

编辑:忘记括号

于 2013-10-17T06:35:15.243 回答
0

我认为最好ALTER在给定表中按语句添加随机数列。这将节省大量时间。

于 2013-10-17T06:33:37.717 回答
0

试试这个;

$r_q = $db->query("SELECT rotate FROM ads_man");
$r = $db->fetch_array($r_q);
if($r['rotate'] == "1")
{
    $rotate = 'rotate = "0" OR rotate = "1" AND';
    $order_by = 'ORDER BY RAND()';
}
else
{
    $rotate = 'rotate = "0" AND';
    $order_by = 'ORDER BY dateline DESC';
}

$query = $db->query("
    SELECT type,place,code
    FROM ads_man
    WHERE {$rotate} approved = '1' AND fid = '{$fid}' AND place = '{$zone}'
    {$order_by}
    LIMIT 3");
于 2013-10-17T07:32:06.370 回答