Mc Kernel
Mc Kernel

Reputation: 218

Group query result set data by column value while looping

I making a script to display data from some VPSs, which is being stored in a MySQL database.

$result = mysql_query("SELECT * FROM data");
$data = array();
while ($row = mysql_fetch_array($result)) {
    $data[] = array(
             'id' => $row['id'],
             'hostname' => $row['hostname'],
             'loadavrg' => $row['load average']
    );
}

I would like to separate data by hostnames so I can read it like the following example:

foreach ($data['sitename.com'] as $d)
    echo $d['loadavrg'];

I already tried with the following code (just for testing), but didn't work:

$result = mysql_query("SELECT * FROM data WHERE hostname='sitename.com'");
$data = array();
while ($row = mysql_fetch_array($result)) {
    $data[] = array(
        'sitename.com' => array(
            'id' => $row['id'],
            'loadavrg' => $row['load average']
        )
    );
}

I'm just missing the right way and syntax to achieve it.

Upvotes: 1

Views: 56

Answers (2)

GoSmash
GoSmash

Reputation: 1108

Try this,

while ($row = mysql_fetch_array($result)) {
    $hostname = $row['hostname'];
    $data[$hostname][] = array(
        'id' => $row['id'],
        'loadavrg' => $row['load average']
    );
}

Upvotes: 2

u_mulder
u_mulder

Reputation: 54831

Every element should be added as subarray of 'sitename.com':

while ($row = mysql_fetch_array($result)) {
    $data['sitename.com'][] = array(
        'id' => $row['id'],
        'loadavrg' => $row['load average']
    );
}

Upvotes: 3

Related Questions