簡體   English   中英

如何將MySQL SELECT結果用作變量,然后在另一個SELECT / UNION語句中使用變量?

[英]How to use MySQL SELECT results as variables and then use the variables in another SELECT/UNION statement?

我的標題不能完全概括我所需要的內容,但希望在我解釋我要做什么時會更清楚。 我正在嘗試創建一個基於PHP的網頁,該網頁采用輸入的關鍵字並將其用於將選擇的數據輸出到excel電子表格。

我的第一條語句使用關鍵字查找在其自己的表中列出的“ itemid”(單獨的鍵和ID表並不理想,但我無法更改):

SELECT items.itemid
FROM items
LEFT JOIN hosts ON hosts.hostid = items.hostid
WHERE hosts.host LIKE 'keyword';

這將返回一組可能返回0個結果或10個以上結果的數字。 現在,我需要根據這些結果返回選擇的結果。

例如:

SELECT items.name, data.clock, data.value
FROM data
LEFT JOIN items ON data.itemid = items.itemid
WHERE item.itemid = '<First result from previous statement>'
GROUP BY data.value
ORDER BY items.name, data.clock ASC
LIMIT 15
UNION ALL
SELECT items.name, data.clock, data.value
FROM data
LEFT JOIN items ON data.itemid = items.itemid
WHERE item.itemid = '<Second result from previous statement>'
GROUP BY data.value
ORDER BY items.name, data.clock ASC
LIMIT 15
...
So on for however many results there were
...
    SELECT items.name, data.clock, data.value
FROM data
LEFT JOIN items ON data.itemid = items.itemid
INTO OUTFILE '/file/location.csv' FIELDS ..ect
WHERE item.itemid = '<x result from previous statement>'
GROUP BY data.value
ORDER BY items.name, data.clock ASC
LIMIT 15

我將使用WHERE IN代替UNION ALL,但我需要將其限制為每個值15個結果,因為有些值最多可以包含100,000+行。

我當時在想可能將第一個語句的結果輸​​入到數組中,然后將該數組用作第二個語句中的變量,但是由於每次我不確定如何寫時變量的數量都可能不同以某種方式重復執行代碼,使代碼重復必要的次數,然后將INTO OUTFILE放在正確的位置。

我在用語言表達自己的需求時遇到了麻煩,因此,如果有任何不清楚的地方,請告訴我,我會盡快提供所需的信息。

感謝您的任何幫助。

如果要使用多個查詢來進行此操作,可以同時執行do。 我認為我們可以通過使用以下單個查詢來做到這一點。

SELECT items.name, data.clock, data.value
FROM data
LEFT JOIN items ON data.itemid = items.itemid
LEFT JOIN hosts ON hosts.hosstid = items.hostid
WHERE hosts.host LIKE 'keyword';
GROUP BY data.value
ORDER BY items.name, data.clock ASC
LIMIT 15;

最好的方法是從第一個查詢中恢復信息,然后執行一會兒:

$x=0;
while($row=$result->mysqli_fetch_array()){ //$result is the variable where you have the result of the 1st query execution
    //execute second query with $row[0], $row[1]... as variables, get the results in the variable $result2.
    //If you need groups of 15 elements do something like: 
    $y=$x*15;
    $query2="SELECT .... LIMIT $y, 15";
    $result2=$mysqli->query($query2);
    while($row2=$result2->mysqli_fetch_array()){
        //do something with the results of the 2nd query, stored in $row2[0], $row2[1], etc
    }
    $x++;
}

暫無
暫無

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

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