2014-08-28 109 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

相關問題