1

私のタイトルは、私が必要としていることを完全に要約しているわけではありませんが、私がやろうとしていることを説明するときに、より明確になることを願っています。入力したキーワードを取得し、それを使用して選択したデータをExcelスプレッドシートに出力するPHPベースのWebページを作成しようとしています。

私の最初のステートメントは、キーワードを使用して、それが参照する'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

UNIONALLの代わりにWHEREINを使用しますが、最大100,000行以上になる可能性があるため、値ごとに15件の結果に制限する必要があります。

最初のステートメントの結果を配列に入力し、その配列を2番目のステートメントの変数として使用することは可能かもしれないと思っていましたが、変数の量は毎回異なる可能性があるため、どのように書くことができるかわかりませんコードを必要な回数繰り返し、INTOOUTFILEを正しい場所に配置するようにコードを記述します。

必要なものを言葉で表現するのに苦労しましたので、不明な点がありましたらお知らせください。必要な情報をできるだけ早く提供します。

よろしくお願いします。

4

2 に答える 2

1

複数のクエリを使用してこれを作成する場合は、dowhileを使用できます。以下のような単一のクエリを使用することでこれを行うことができると思います。

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;
于 2012-11-12T22:01:18.353 に答える
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++;
}
于 2012-11-12T16:24:32.113 に答える