PHP - Oracle CSV создание запроса, возвращать результаты в той же строке - PullRequest
3 голосов
/ 29 ноября 2011

Прежде всего, я прошу прощения, если вопрос, который я здесь задаю, глуп ). Во-вторых, я знаю, что ответ на мой вопрос очень прост, но я довольно новичок в PHP / Scripting и часами нахожусь в тупике, пытаясь найти решение.

У меня есть скрипт PHP, который запрашивает базу данных Oracle, выводит ее в файл CSV, а затем отправляет мне файл по электронной почте. Это здорово, за исключением того, что я хочу, чтобы все результаты запроса выводились в одну строку.

Я хочу настроить автоматизацию, которая запускает несколько запросов (по 5-10 строк в каждом) для вывода в файл CSV. Выдержка из файла php выглядит следующим образом:

$csvLength = fputcsv($tmp, array(
    'Code',
    'count(*)'
));

while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))
{
    $csvLength += fputcsv($tmp, array(
        $row['Code'],
        $row['COUNT(*)']
    ));
}

rewind($tmp);
$csvContent = fread($tmp, $csvLength);
fclose($tmp);

Это запишет CSV-файл с выводом примерно так:

Code,count(*)
APPLE,201
ORANGE,504
BANANA,864

То, что я хочу, чтобы выходные данные выглядели примерно так:

Code,count(*),Code,count(*),Code,count(*)
APPLE,201,ORANGE,504,BANANA,864

(Верхний ряд не обязательно должен выводить более одного повторения)

Затем я могу добавить в скрипт php больше запросов, чтобы созданный CSV-файл получился следующим образом:

Run blah.php from dates 21/11/2011 to 27/11/2011...
Code,count(*),Code,count(*),Code,count(*)
APPLE,201,ORANGE,504,BANANA,864

Reason,count(*),Reason,count(*),Reason,count(*)
Rotten,10,Bruised,42,Fermented,67

Region,count(*),Region,count(*),Region,count(*)
Oddtown,503,Newtown,204,Averagetown,631

Заранее спасибо всем, кто может ответить на мой вопрос. Опять же, я могу представить, что ответ, вероятно, очень прост, но все, что я пытаюсь сделать, кажется, дает мне ошибки, и я не могу найти ответ где-либо в Интернете.

1 Ответ

1 голос
/ 29 ноября 2011

Я бы поместил свои результаты в массив следующим образом:

$arr = array('Apple', '201', 'Orange', 504);

Тогда я бы использовал fprintf и implode , чтобы напечатать их в ряд:

if (!($fp = fopen('file.txt', 'w'))) {
   exit;
}
fprintf($fp, "%s\n",implode(",", $arr));

Будет выведено

Apple, 201, Orange, 504

Для имен столбцов все, что вам нужно сделать, это получитьколичество результатов и напечатайте их много раз.Например, если бы было 5 результатов, я бы сделал это:

fprintf ($ fp, "% s \ n", implode (",", array_fill (0, 5, "Code, count)(*) ")));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...