Как я могу поместить строки данных MySQL под соответствующими заголовками, используя PHP? - PullRequest
1 голос
/ 08 марта 2010

У меня следующая структура таблицы MySQL:

num field company phone     website

1   Gas   abcd    123456789 abcd.com
2   Water efgh    987654321 efgh.com
3   Water ijkl    321654987 ijkl.com
4   Heat  mnop    987654321 mnop.com
5   Gas   qrst    123789654 qrst.com
...

Возможно ли с помощью PHP (возможно, с использованием некоторой смеси GROUP_BY и ORDER_BY) отобразить данные на экране в следующем формате:

Gas:
abcd       qrst
123456789  123789654
abcd.com   qrst.com

Water:
efgh       ijkl
987654321  321654987
efgh.com   ijkl.com

Heat:
mnop
321654987
mnop.com

Точный формат этого не важен. Мне просто нужно, чтобы различные строки данных были перечислены в соответствующем поле, ни одно из полей не повторялось. Некоторое время я пытался понять это, но я новичок в PHP и, похоже, не могу понять, как это сделать, если это вообще возможно, или если есть лучший способ организовать мои данные чтобы было проще.

Ответы [ 2 ]

2 голосов
/ 08 марта 2010

Чтобы избежать выполнения запросов «Газ», «Вода» и «Нагрев», вы можете упорядочить результаты по «полю», а затем обработать отображение в PHP ...

SELECT
    Field,
    Company,
    Phone,
    Website
FROM
    tblYourTable
ORDER BY
    Field

В вашем цикле PHP вам нужно будет следить за вашим текущим "полем" и создавать новый список, когда он изменяется. Например:

$CurrentField = '';

... loop

if ($MyData->Field != $CurrentField) {
    $CurrentField = $MyData->Field;
    ....
}

... end loop
1 голос
/ 08 марта 2010

Я предполагаю, что вы знаете, как извлечь данные MySQL в массив ... итак, у нас есть:

[0] {
    num => 1,
    field => "Gas",
    company => "abcd",
    phone => "123456789",
    website => "abcd.com"
    }
[1] ... (so on)

Затем создайте цикл, подобный:

foreach($data as $row) {
   $service = $row["field"]; //Water, Gas, etc...
   unset($row["field"]); //do not add this
   foreach($row as $key => $value) {
       $field[$service][$key][] = $value;
   }
}

Полученный массив будет выглядеть примерно так:

$field["Gas"]["company"][0] = "abcd";
$field["Gas"]["company"][1] = "qrst";
$field["Water"]["company"][0] = "efgh";
...
$field["Gas"]["phone"][0] = "123456789";
$field["Gas"]["phone"][1] = "123789654";
$field["Water"]["phone"][0] = "987654321";
...

Таким образом, вы можете сгенерировать вывод:

foreach($field as $service => $infoarr) {
   echo $service."\n";
   foreach($infoarr as $info => $datarr) {
       foreach($datarr as $datum) {
          echo $datum."\t"; 
       }
       echo "\n";
   }
   echo "\n";
}

Теоретически (не проверено) выдаст:

Gas 
abcd qrst 
123456789 123789654 

Water 
efgh ...

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

...