我的标题并没有完全正确地总结我需要什么,但希望当我解释我正在尝试做的事情时它会更清楚。我正在尝试创建一个基于 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 放在正确的位置。
我在用语言表达我需要的东西时遇到了一些麻烦,所以如果有任何不清楚的地方,请告诉我,我会尽快提供任何需要的信息。
感谢您提前提供任何帮助。