さて、これを行うにはいくつかの方法があります...
方法 1
配列ビットを取り出して、データをより適切に処理する場合、これを行う正しい方法は次のようになります。
SELECT `A`.`ID`, `A`.`Name`, `B`.`Value`
FROM A
INNER JOIN
`B` ON `A`.`ID` = `B`.`entryID`
ORDER BY `A`.`ID`, `B`.`Value`
これにより、次のような結果が返されます。
array(
0 => array(ID=>1, Name=>'Jeff', Value=>'U.S'),
1 => array(ID=>1, Name=>'Jeff', Value=>'91725'),
2 => array(ID=>2, Name=>'Bob', Value=>'China')
)
そのように反復します(これを変更して、文字列にエコーするのではなく、目的の配列構造を作成できます...):
$mysqli = new mysqli(...);//Make your db connection
$query = $mysqli->query("
SELECT `A`.`ID`, `A`.`Name`, `B`.`Value`
FROM A
INNER JOIN
`B` ON `A`.`ID` = `B`.`entryID`
ORDER BY `A`.`ID`, `B`.`Value`
");
$newArr = array();
$lastID = '';
if($query->num_rows){
while($row = $query->fetch_assoc()){
if($lastID == $row['ID']){
end($newArr);
$key = key($newArr);
$newArr[$key][] = $row['Value'];
}
else{
$newArr[] = array($row['Name'], $row['Value']);
}
$lastID = $row['ID'];
}
}
var_export($newArr);
/**
Output:
array (
0 =>
array (
0 => 'Jeff',
1 => 'U.S.',
2 => '91275',
),
1 =>
array (
0 => 'Bob',
1 => 'China',
),
)
*/
方法 2
から配列として出力したい/必要がある場合はSQL query
、次のようなものをお勧めします。
SELECT
A.ID, A.Name,
CONCAT(
'[',
GROUP_CONCAT('"', B.Value, '"'),
']'
) as Values
FROM A
INNER JOIN B ON B.entryID = A.ID
GROUP BY A.ID
次のように出力Values
されjson
ます:
array(
0=>arryay(ID=>1, Name=> 'Jeff', Values='["U.S.", "91725"]'),
1=>arryay(ID=>1, Name=> 'Bob', Values='["China"]')
)
json_decode
でレコードにアクセスするValues
たびに を実行する必要がありますphp
。何かのようなもの:
$mysqli = new mysqli(...);//Make your db connection
$query = $mysqli->query("
SELECT
A.ID, A.Name,
CONCAT(
'[',
GROUP_CONCAT('"', B.Value, '"'),
']'
) as Values
FROM A
INNER JOIN B ON B.entryID = A.ID
GROUP BY A.ID
");
$newArr = array();
if($query->num_rows){
while($row = $query->fetch_assoc()){
$newArr[] = array($row['Name']);
end($newArr);
$key = key($newArr);
$fieldData = json_decode($row['Values']);
foreach($fieldData as $value){
$newArr[$key][] = $value;
}
}
}
var_export($newArr);
/**
Output:
array (
0 =>
array (
0 => 'Jeff',
1 => 'U.S.',
2 => '91275',
),
1 =>
array (
0 => 'Bob',
1 => 'China',
),
)
*/
注:このようにしないことをお勧めします...データがこれを許可する方法で保存されていない場合、あらゆる種類のバグにつながる可能性があるため (たとえば、エンコード/エスケープしていない場合) "
)。大量のデータがプルされている場合、問題が発生する可能性もありますB
...