2014-02-20 6 views
0

Глядя на вывод mysql в json. Должно быть алфавитнымкак сгруппировать результаты mysql по алфавиту?

JSON должен быть таким:

[ 
    { 
    "letter": "A", 
    "result": [ 
     { 
     "name": "A&W" 
     } 
    ] 
    }, 
    { 
    "letter": "B", 
    "result": [ 
     { 
     "name": "Best Buy " 
     } 
    ] 
    } 
] 

Потребности в групповые результаты MySQL и добавить их в «результате» для соответствующего письма. На основе первой буквы столбца «name» в mysql.

Heres мой код:

$sql = "SELECT name AS nameletter FROM stores ORDER BY FirstLetter"; 


    $result = mysql_query($sql); 

while($data = mysql_fetch_assoc($result)){ 

     echo $data['name']; 

    } 

-

+0

'ORDER BY СЛЕВА (имя, 1)'. Готово. –

ответ

1

Вы всегда можете SubStr первую букву имени, а затем использовать, чтобы заказать свой запрос.

SELECT name, SUBSTR(name, 1, 1) FirstLetter AS nameletter FROM stores ORDER BY FirstLetter 

Так что это будет возвращать что-то вроде

Jason, J 
Henry, H 
Harry, H 
Larry, L 
Lenny, L 

В PHP вы должны создать массив из этих значений, то вы должны быть достаточно легко могут проходной массив и выйти имена за письмо.

+0

необходимо отделить каждую группу буквой алфавита как заголовок. Нужно идти в массив для печати json – ASH

1

Вы используете очень устаревшие функции mysql, которые будут удалены в будущем. Вы должны начать переводить свои знания на интерфейс PDO для доступа к базе данных. Среди многих преимуществ использования PDO, он предлагает отличную функциональность, которая принесет вам пользу. Следует отметить, что использование, о котором я указываю ниже, не является наиболее эффективным способом, и если вы имеете дело с длинными списками, вы не должны этого делать. Но, его удовольствие знать, как заставить php выполнять большую часть работы для вас.

Учитывая таблицу «магазины» с одной колонке «название» и следующие примеры значений:

name 
---- 
Black Pencil theatre Company 
Bluebird Films 
Foggy Camel Films 
Fork and Spoon Marketing 
Opaque Cat Web Design 
Transparent Toaster Marketing 
Content Panda Company 
For Yours and Everyone Else's Eyes Only 

Вы можете сначала использовать запрос для получения данных в значимом порядке:

SELECT LEFT(name, 1) AS FirstLetter, name FROM stores ORDER BY FirstLetter, name 

FirstLetter name 
B    Black Pencil theatre Company 
B    Bluebird Films 
C    Content Panda Company 
F    Foggy Camel Films 
F    For Yours and Everyone Else's Eyes Only 
F    Fork and Spoon Marketing 
O    Opaque Cat Web Design 
T    Transparent Toaster Marketing 

Использование классов PDO, мы можем получить, что данные группируются непосредственно:

<?php 
$dbh = new PDO('mysql:host=localhost;dbname=sotest', 'testuser', 'testpass'); 
$stmt = $dbh->query('SELECT left(name,1) as FirstLetter, name FROM stores ORDER BY FirstLetter, name'); 
$results = $stmt->fetchAll(PDO::FETCH_COLUMN | PDO::FETCH_GROUP); 

/* $results is now = 
array(5) { 
    ["B"]=> 
    array(2) { 
    [0]=> 
    string(28) "Black Pencil theatre Company" 
    [1]=> 
    string(14) "Bluebird Films" 
    } 
    ["C"]=> 
    array(1) { 
    [0]=> 
    string(21) "Content Panda Company" 
    } 
    ["F"]=> 
    array(3) { 
    [0]=> 
    string(17) "Foggy Camel Films" 
    [1]=> 
    string(39) "For Yours and Everyone Else's Eyes Only" 
    [2]=> 
    string(24) "Fork and Spoon Marketing" 
    } 
    ["O"]=> 
    array(1) { 
    [0]=> 
    string(21) "Opaque Cat Web Design" 
    } 
    ["T"]=> 
    array(1) { 
    [0]=> 
    string(29) "Transparent Toaster Marketing" 
    } 
}*/ 

Как вы можете видеть, PDO fetchAll уже сгруппировал их для вас. Потому что вы хотите их в определенном формате, вы можете сделать простой цикл над ними без необходимости возиться с глядя или сравнивая значения на всех:

$structured = array(); 
foreach ($results as $firstLetter => $companies) { 
    $structured[] = array(
     'letter' => $firstLetter, 
     'result' => array_map(
      function($c) { return array('name' => $c); }, 
      $companies 
      ) 
    ); 
} 
$structured = json_encode($structured); 

/* $structured is now = 
[{ 
    "letter": "B", 
    "result": [{ 
     "name": "Black Pencil theatre Company" 
    }, { 
     "name": "Bluebird Films" 
    }] 
}, { 
    "letter": "C", 
    "result": [{ 
     "name": "Content Panda Company" 
    }] 
}, { 
    "letter": "F", 
    "result": [{ 
     "name": "Foggy Camel Films" 
    }, { 
     "name": "For Yours and Everyone Else's Eyes Only" 
    }, { 
     "name": "Fork and Spoon Marketing" 
    }] 
}, { 
    "letter": "O", 
    "result": [{ 
     "name": "Opaque Cat Web Design" 
    }] 
}, { 
    "letter": "T", 
    "result": [{ 
     "name": "Transparent Toaster Marketing" 
    }] 
}] 
*/ 
Смежные вопросы