如果满足列条件,则随机选择行

时间:2013-10-17 06:27:45

标签: php mysql

我的ads_man表格具有以下结构;

ads_man table structure

如果列“rotate”为1,我想从此表中随机选择行,否则如果rotate = 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");

它随机选择行但问题是我无法找到 quick 方式来选择这些行而不是使用另一个查询来查找所有那些已旋转的行= 1,然后在上述查询中使用ORDER BY RAND()

请帮忙!

4 个答案:

答案 0 :(得分: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");

答案 1 :(得分:2)

有几种方法可以做到这一点:

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

UNION

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

编辑:忘记括号

答案 2 :(得分:0)

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

答案 3 :(得分: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");