2014-08-28 81 views
-1

所以我有一个问题,我有一个用户表和一个网站表我需要从用户表中选择一个随机用户只是有用户名有一行有用户名的网站表。这可能吗?两个pdo选择一个,如果这两个表中有一个结果

,所以我得到一个随机的用户表

$stmt9 = $db->prepare('SELECT * FROM users WHERE coins >= ? ORDER BY RAND() LIMIT 1'); 
$stmt9->execute(array('1')) ; 
$row = $stmt9->fetch(); 

现在一些我需要如何抓住一个随机的网站均在业主=没有用户名,像这样

$stmt21 = $db->prepare('SELECT * FROM websites WHERE owner = ? ORDER BY RAND() LIMIT 1'); 
$stmt21->execute(array($row['username'])) ; 
$row21 = $stmt21->fetch(); 

我的问题是它将抓住用户名罚款,但如果用户没有提交一个网站第二选择将失败,所以我需要把这两个选择在一起。并且抓取一排网站表有一排,并且用户表中的硬币已经超过1.

回答

1

您可以检查第一个查询是否返回空集,无论如何,如果您想要一个查询,并且您是如果你愿意,你可以限制子查询中添加由随机顺序和限制条款选择的用户名

SELECT 
    * 
FROM 
    websites w 
WHERE w.owner 
    IN (SELECT u.username FROM users u WHERE u.coins >= ?) 
ORDER BY 
    RAND() 
LIMIT 
    1 

:不感兴趣的用户名,你可以使用它。

+0

我可以问你是否正在设置u.coins> =?至 ?? – 2014-08-28 23:01:33

+0

@NickDavies你从用户表中选择了一个用户名的子集,这个用户名的硬币大小或者等于某个值,然后你可以使用这些用户名来过滤网站的结果。 'coins> = 0'部分来自您的第一个查询:'SELECT * FROM users WHERE coins> =?'。 – 2014-08-28 23:03:43

+0

所以这将是第二个查询?我摆脱了我的第二个,并用此替换它? – 2014-08-28 23:10:39

相关问题