2017-04-18 63 views
0

我查看了許多類似的解決方案,但無法找到滿足我需求的解決方案。Mysql通過行循環檢查行,直到找到一個數爲零

我想我可以限制用戶在24小時內創建每個URL超過兩個SHORTURL

人濫用這一點,並創造10+的URL和堵塞我的數據庫。所以我想他們限制在2%url和離開的消息,如果他們已經超過了

現在我有這個檢查,看看他們有多少每個URL進行

$sql = "SELECT * FROM ShortUrls WHERE user_id='$user' AND vidID='$urlMe' AND time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))"; 
    $result = $conn->query($sql); 

    echo "user created this many urls: " .$result->num_rows; 
    if ($result->num_rows > 2) { 
     // keep checking till find one less that 2 
    } 

環通數據庫的網址,並檢查他們是否在24小時內使用了相同的網址兩次以上。如果他們在24小時內沒有使用超過兩次的網址,他們可以使用該網址創建一個新的縮短網址。

編輯解決方案,我用:

$sql2 = "SELECT tube.vidID FROM tube LEFT JOIN (SELECT COUNT(*) c, vidID FROM ShortUrls WHERE user_id='$user' AND time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) GROUP BY vidID) urls ON urls.vidID = tube.vidID WHERE urls.c < 2 LIMIT 1;"; 
$result = $conn->query($sql2); 

if ($row = $result->fetch_assoc()) { 
    echo "You can add a URL to this video: " . htmlspecialchars($row['vidID']); 
} else { 
    echo "All videos used up!"; 
} 

希望這可以給別人你想看到哪些vidID S按同樣在過去24小時中創建了不到兩排

+0

循環瀏覽完整的網址列表? – Dave

+0

希望我的編輯更好地解釋 –

回答

1

做有益user_id

SELECT 
    COUNT(*) c, vidID 
FROM 
    ShortUrls 
WHERE 
    user_id = ? 
    AND time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) 
GROUP BY 
    vidID 
HAVING 
    c < 2 

但如果你預先知道vidID,而你只關注一個vidID

SELECT 
    COUNT(*) 
FROM 
    ShortUrls 
WHERE 
    user_id = ? 
    AND vidID = ? 
    AND time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) 

如果你想阻止他們,如果他們已經創建了兩個以上的任何vidID,試試這個:

SELECT 
    COUNT(*) c, vidID 
FROM 
    ShortUrls 
WHERE 
    user_id = ? 
    AND time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) 
GROUP BY 
    vidID 
HAVING 
    c > 2 

如果查詢返回任何東西,用戶在過去24小時內爲單個vidID創建了2個以上。

如果你想獲得幻想:「這個偉大的工程,但我需要環通,直到我找到一個結果小於2,然後允許再創建一個新的」

SELECT 
    COUNT(*) 
FROM (
    SELECT 
     COUNT(*) c, vidID 
    FROM 
     ShortUrls 
    WHERE 
     user_id = ? 
     AND time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) 
    GROUP BY 
     vidID 
    HAVING 
     c > 2 
) i 
+0

多數民衆贊成在類似於我有,但我需要循環,看看是否已在24小時內使用超過2倍的vidID。轉到下一個vidID,直到找到一個在24小時內使用少於2次的vidID。如果沒有剩下,則說「你超出了」。我有一個可用的vidIDS列表,他們可以使用,所以我會知道vidIDS –

+0

仍然不知道你想要什麼。你想檢查一個特定的'vidID'嗎?或者你想阻止他們,如果他們爲**任何**'vidID'創建超過2個? – Dave

+0

我想阻止他們創建該vidID的任何更多縮短的URL,如果他們已經在過去24小時內使用該vidID創建了2個縮短的URL –

相關問題