我有一个简单的查询,我需要修改但似乎无法弄清楚。
$query = "SELECT cust.first,pets.pet_name FROM `cust`
LEFT JOIN pets ON cust.id=pets.client_id
WHERE `clinic`='20'";
$result = $conn->query($query) or die($conn->error.__LINE__);
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$firstname=stripslashes($row['first']);
$pet=stripslashes($row['pet_name']);
echo $firstname." - ".$pet."<br/>";
}
}
else {
echo 'NO RESULTS';
}
此代码生成:
Name1 - Pet 1
Name1 - Pet 2
Name2 - Pet 1
Name2 - Pet 2
Name3 - Pet 1
Name4 - Pet 1
我需要的是:
Name1 - Pet 1, Pet 2
Name2 - Pet 1, Pet 2
Name3 - Pet 1
Name4 - Pet 1
但我无法找到如何完成这项工作。 我理解为什么它现在做错了。
我试图将pets.pet_name作为一些东西连接起来,但是不能让它工作。 接下来应该尝试什么?
谢谢。
答案 0 :(得分:1)
试试这个:
if($result->num_rows > 0) {
$curName = '';
while($row = $result->fetch_assoc()) {
$firstname=stripslashes($row['first']);
$pet=stripslashes($row['pet_name']);
if ($firstname == $curName) {
echo ",".$pet;
} elseif ($curName!='') {
echo "<br/>".$firstname." - ".$pet;
} else {
echo $firstname." - ".$pet;
}
$curName = $firstname;
}
}
答案 1 :(得分:1)
您需要将查询更改为:
SELECT cust.first, GROUP_CONCAT(pets.pet_name) AS pet_names
FROM cust
LEFT JOIN pets ON cust.id=pets.client_id
WHERE clinic = '20'
GROUP BY cust.id
它产生你想要的结果集;没有必要更改PHP代码。
查看GROUP_CONCAT()
功能的文档以查看其选项;默认情况下,它使用逗号(','
)来连接值,也许您希望在逗号后面有空格。您还可以控制连接值的顺序。
答案 2 :(得分:0)
你应该像这样构建一个数组:
array('data') {
string ['cust_id'] =>
['firstname']=>string('Name1')
array('pets') {
[0]=> string('pet1')
[1]=> string('pet2')
[2]=> string('pet3')
.
.
.
}
}
这样,您拥有属于客户的所有宠物,id_customer是关键。为此,您应该获取所有数据以构建它,然后再次获取它以进行打印。
以下是没有测试的示例:
$query = "SELECT cust.id, cust.first,pets.pet_name FROM `cust`
LEFT JOIN pets ON cust.id=pets.client_id
WHERE `clinic`='20'";
$result = $conn->query($query) or die($conn->error.__LINE__);
$data = array();
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$firstname=stripslashes($row['first']);
$pet=stripslashes($row['pet_name']);
echo $firstname." - ".$pet."<br/>";
if(!isset($data[$row['cust.id']]['firstname']))
$data[$row['cust.id']]['firstname'] = $firstname;
$data[$row['cust.id']]['pets'][] = $pet;
}
foreach ($data as $item) {
$str = '';
$str .= $item['firstname'];
$num_pets = count($item['pets']);
for($i=0;$i<$num_pets;$i++) {
$str.= " - Pet " . $item['pets'][$i];
if($i<($num_pets-1)) $str.=",";
}
echo $str ."<br/>";
}
}
else {
echo 'NO RESULTS';
}