簡體   English   中英

檢查mysql查詢結果以運行第二個查詢,該查詢在第一個查詢結果中不可用

[英]Check mysql query result to run second query which is not available in first query result

我有以下代碼:

$sql = "SELECT ns, id FROM `dns` WHERE `ns` = 1 LIMIT 0, 30 ";       
$result = mysql_query($sql);

// After this I need to run second query which is not available in first query. Help me with this please.
$sql2 = "SELECT ns, id FROM `dns` WHERE `ns` = 1 AND `id` = not available in first query, how to do that? LIMIT 0, 30 ";         
$result = mysql_query($sql);

// I can then echo my first query result here 
// I can then echo my second query result here 

我需要做的是檢查第一個結果以運行第二個查詢。 我故意設置了限制。 例如,如果第一個查詢中的id為1到30。 第二個查詢將查詢id ,例如從31到60。

希望您能理解我要說的話。 提前致謝。

更新 :我需要使用查詢結果進行挖掘查找。 查詢結果是名稱服務器。 由於挖掘響應速度是隨機的,因此我想例如進行拆分:從90個域名服務器中提取30個結果,並同時運行3個挖掘查找。 因此,這就是為什么第二個查詢(名稱服務器)結果在第一個查詢結果中不可用而第三個查詢結果在第二個查詢結果中不可用的原因。 我需要使用所有3個結果供以后使用。 非常感謝您的回復。 謝謝。

您可以更改LIMIT條件。 有一個“偏移”選項(您在第一個查詢中將其指定為0)。 使用您的示例,以下內容就足夠了。

$sql = "SELECT ns, id FROM `dns` WHERE `ns` = 1 LIMIT 0, 30 ";       
$result = mysql_query($sql);

// After this I need to run second query which is not available in first query. Help me with this please.
$sql2 = "SELECT ns, id FROM `dns` WHERE `ns` = 1 LIMIT 30, 30 ";         
$result = mysql_query($sql);

第二個查詢將從偏移量開始30,然后再返回30行,因此在本例中為第31-60行

您更新基於問題的修改 ,更明智的方法是簡單地做

$sql = "SELECT ns, id FROM `dns` WHERE `ns` = 1 LIMIT 0, 90 ";       
$result = mysql_query($sql);

然后讓PHP根據需要將行拆分為多個請求,以分離服務器,從而確保沒有重復,並減少了PHP和MySQL之間的來回往返。

如果您只需要獲取接下來的30行,為什么不這樣做:

LIMIT 30, 30

關於第二個查詢?

有關LIMIT請參見http://dev.mysql.com/doc/refman/5.1/en/select.html#id838627

有兩個參數,第一個參數指定要返回的第一行的偏移量,第二個參數指定要返回的最大行數。

請注意,如果您想更清楚一點,也可以將其寫為LIMIT 30 OFFSET 30 所以:

$sql = "SELECT ns, id FROM `dns` WHERE `ns` = 1 LIMIT 30 OFFSET 30";
$result = mysql_query($sql);

如果您的ID /查詢僅是示例,而您真正需要的是一個從集合中選擇的查詢,該查詢從另一個查詢中排除了結果集,那么您可以使用這樣的子查詢:

SELECT ns, id
FROM `dns`
WHERE `ns` = 1
AND `id` NOT IN (
    SELECT `id`
    FROM `dns`
    WHERE `ns` = 1
    LIMIT 0, 30
)
LIMIT 0, 30

首先,內部子查詢將運行並返回ID列表。 由於我們指定了NOT IN (...)因此將從外部查詢中明確排除該組ID。

NOT IN與子查詢一起使用,如下所示:

SELECT ns, id FROM `dns` WHERE `ns` = 1 AND `id` NOT IN 
(SELECT ns, id FROM `dns` WHERE `ns` = 1 LIMIT 0, 30) 
LIMIT 0, 30

那你有什么問題

而且為什么不只是進行子選擇或加入?

為什么不做沒有限制的第一個查詢,然后使用for循環之類的東西提取前30個結果呢?

節省做兩個查詢。

所以

$query = SELECT ns, id FROM dns WHERE ns = 1
$result = mysql_query($query);

for ($i=0;$i<30;$i++) {
//Do Stuff with mysql_fetch_row...
}

for ($i=0;$i<30;$i++) {
//Do more stuff
}

除非有原因,否則您無法一次獲得所有結果?

編輯:雖然很明顯,如果您絕對只想要60個結果,則可以在查詢中輸入LIMIT 60

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM