2010-12-30 8 views
-1

Erstellen Nicht wirklich sicher, wie dies zu erklären, aber:ein Array aus einer MySQL-Datenbank

Say I $ array haben und ich brauche eine MySQL-Datenbank zu tun abfragen, um den Wert einer Zeile zu packen, ‚name‘, Speichern Sie dann den Array-Schlüssel als diesen Namen, speichern Sie dann den Wert als die Anzahl der Zeilen.

Also haben wir $ array ['bob'] mit einem Wert von 100 Bobs in der Datenbank, dann noch ein $ array ['john'] mit einem Wert von 20 Bobs in der Datenbank. Wie könnte ich das schnell machen?

+0

Sind Sie mit PHP mysql_ * Funktionen, mysqli oder PDO ? Oder noch keiner der oben genannten? – JAL

+0

'$ array ['john'] mit einem Wert von 20 Bobs 'Was bedeutet das? – webbiedave

+0

@webbiedave - Ich nehme an, dass er dort 20 Johns meint. 120 Bobs wären eine Menge Bobs. – kander

Antwort

2

Mit einer einzigen Abfrage und eine group by Klausel:

$query = "select name, count(*) from my_table group by name"; 

Die Besonderheiten der Daten aus der Datenbank ziehen ich Ihnen überlassen, aber vorausgesetzt, Sie mit einem mehrdimensionalen Array von Zeilen aufzuwickeln, können Sie Karte der Name auf die Frequenz dieses Namens mit:

$frequency = array(); 
foreach ($rows as $row) 
    $frequency[$row[0]] = (int)$row[1]; 
+0

Ich habe das versucht, aber aus irgendeinem Grund werde ich immer wieder ungültige Ergebnisse zurückgeworfen. Meine Abfrage: SELECT COUNT (DISTINCT ipaddress), Name FROM Tabelle GROUP BY Name - Ich bekomme 1-2 Ergebnisse, aber das ist einfach nicht richtig. :( –

+0

Während auch mit: while (r $ = mysql_fetch_array ($ result)) $ array [$ r [ 'name']] = $ r [0]; –

+0

@Talasan: Das ist nicht die Abfrage schlug er vor – webbiedave

2

PDO verwenden, würde es so aussehen:

$sth = $conn->prepare("SELECT name, count(*) FROM names GROUP BY name"); 
$sth->execute(); 

/* Group values by the first column */ 
$array = $conn->fetchAll(PDO::FETCH_COLUMN); 

Ergebnis:

$array = array('bob'=>'100', 'john'=>'20'); 
2
mysql> SELECT name, count(name) as count FROM names GROUP BY name; 
+------+-------+ 
| name | count | 
+------+-------+ 
| bill |  6 | 
| bob | 11 | 
| joe | 13 | 
+------+-------+ 

, die wie getan werden könnte:

$array = Array('bob'=>0,'bill'=>0,'joe'=>0); 
$sql = "SELECT name, count(name) as count 
     FROM  names 
     WHERE  name IN ('".implode("','",array_map('mysql_real_escape_string',array_keys($array)))."') 
     GROUP BY name"; 
if ($result = mysql_query($sql)){ 
    while (($row = mysql_fetch_array($result)) !== false) 
    $array[$row['name']] = $row['count']; 
} 
var_dump($array); 

Welche macht:

array(3) { 
    ["bob"]=> 
    string(2) "11" 
    ["bill"]=> 
    string(1) "6" 
    ["joe"]=> 
    string(2) "13" 
} 
Verwandte Themen