如何使用MySQL SELECT结果作为变量,然后在另一个SELECT / UNION语句中使用变量?

时间:2012-11-12 16:13:43

标签: php mysql select

我的标题并没有完全总结我需要的东西,但希望在我解释我正在尝试做的事情时会更清楚。我正在尝试创建一个基于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放在正确的位置。

我在收听文字时遇到了一些麻烦,所以如果有什么不清楚请告诉我,我会尽快提供所需的信息。

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:1)

如果您想使用多个查询进行此操作,可以使用do while。我想我们可以通过使用下面的单个查询来实现这一点。

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;

答案 1 :(得分:0)

最好的方法是从第一个查询中恢复信息然后再做一段时间:

$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++;
}