如果没有行与原始查询匹配,如何在MYSQL中返回默认行

时间:2014-01-07 19:42:27

标签: php mysql

我有一个像

这样的查询
SELECT *
FROM `mytable`
WHERE 
  (`status` LIKE 'active%' OR `status` LIKE 'featured%')
  AND `views` < `tviews`
  AND `id` > 4
ORDER BY RAND()
LIMIT 1;

现在,如果没有与该查询匹配的行,我希望它返回id = 2

的行

这是怎么做到的。注意我希望整行位于id = 2

聚苯乙烯。使用RAND()确实如果表只包含最多100行,只是mysql的新功能,除非必要,否则不想做任何事情

并非它不是一个重复的问题,我阅读的另一个问题和它不一样。返回一个默认值,如“Peter”或0,我希望它返回一个完整的ROW而不是一个值!所以感谢报道并阻止我提问

1 个答案:

答案 0 :(得分:0)

你应该摆脱你对兰德()的使用。那就是说......

$sql ="SELECT *
FROM `mytable`
WHERE 
(`status` LIKE 'active%' OR `status` LIKE 'featured%')
AND `views` < `tviews`
AND `id` > 4
ORDER BY RAND()
LIMIT 1";
$stmt = $conn->query($sql);
if(!$data = $stmt->fetch(PDO::FETCH_ASSOC))
{
    $sql ="SELECT *
    FROM `mytable`
    WHERE 
    (`status` LIKE 'active%' OR `status` LIKE 'featured%')
    AND `views` < `tviews`
    AND `id`=2";
    $stmt = $conn->query($sql);
    $data = $stmt->fetch(PDO::FETCH_ASSOC);
}