好的,我有两张桌子,分类和盘子。每个类别都有一个id。每一道菜都属于特定的类别。现在,我想要的是,所有的菜肴属于一个特定的类别分组。所以所有的汤都在汤阵列{甘蓝,价格,描述,},{番茄,价格,描述,}。所有的鸡都在鸡的排列中等等。我现在要做的是:
$query = "Select id from Category";
$Id = $mysqli->query($query);
while($row = $Id->fetch_assoc()) {
$idlist[] = $row["id"];
}
foreach ($idlist as $id){
$query = "SELECT * from Dishes where Dishes.cat_id = '$id'";
$Listings = $mysqli->query($query);
while($row = $Listings->fetch_assoc()) {
$AllDishes[] = array(
'id' => $row['id'],
'Name' => $row['Name'],
'Description' => $row['Description'],
'cat_id' => $row['cat_id'],
'Price' => $row['Price'],
'ImagePath' => $row ['ImagePath']
);
}
}
但这会导致所有的菜肴被组合在一起。我如何根据菜肴的类别来区分它们?这也是构造JSON数据的正确方式吗?
发布于 2017-09-02 10:41:28
1.使用JOIN
进行单次查询(最佳解决方案):-
$query = "Select Dishes.*,Category.id as cat_id from Category LEFT JOIN Dishes on Dishes.cat_id = Category.id";
$Listings = $mysqli->query($query);
$AllDishes = array();
while($row = $Listings->fetch_assoc()) {
$AllDishes[$row['cat_id']][] = array(
'id' => $row['id'],
'Name' => $row['Name'],
'Description' => $row['Description'],
'cat_id' => $row['cat_id'],
'Price' => $row['Price'],
'ImagePath' => $row ['ImagePath']
);
}
print_r($AllDishes);
如果您想以您的编码方式执行,那么:-
2.根据类别的id
区分它们:-
$query = "Select id from Category";//change column name
$Id = $mysqli->query($query);
while($row = $Id->fetch_assoc()) {
$idlist[] = $row['id'];
}
foreach ($idlist as $id){
$query = "SELECT * from Dishes where Dishes.cat_id = '$id'";
$Listings = $mysqli->query($query);
while($row = $Listings->fetch_assoc()) {
$AllDishes[$id][] = array(
'id' => $row['id'],
'Name' => $row['Name'],
'Description' => $row['Description'],
'cat_id' => $row['cat_id'],
'Price' => $row['Price'],
'ImagePath' => $row ['ImagePath']
);
}
}
3.根据类别的name
区分它们:-
$query = "Select id,category_name from Category";//change column name
$Id = $mysqli->query($query);
while($row = $Id->fetch_assoc()) {
$idlist[] = $row;
}
foreach ($idlist as $id){
$id = $id['id'];
$category_name = $id['category_name']; //change column-name
$query = "SELECT * from Dishes where Dishes.cat_id = '$id'";
$Listings = $mysqli->query($query);
while($row = $Listings->fetch_assoc()) {
$AllDishes[$category_name][] = array(
'id' => $row['id'],
'Name' => $row['Name'],
'Description' => $row['Description'],
'cat_id' => $row['cat_id'],
'Price' => $row['Price'],
'ImagePath' => $row ['ImagePath']
);
}
}
注意:-请在第三个解决方案中更改列名(因为我不知道要存储类别名称的列名是什么)。
发布于 2017-09-02 10:37:21
我不确定,但我认为这里将是您期望的结果循环。
$AllDishes = array();
while($row = $Listings->fetch_assoc()) {
$AllDishes[$row['Name']][] = array(
'id' => $row['id'],
'Name' => $row['Name'],
'Description' => $row['Description'],
'cat_id' => $row['cat_id'],
'Price' => $row['Price'],
'ImagePath' => $row ['ImagePath']
);
}
发布于 2017-09-02 11:09:56
您可以使用SQL联接而不是两个单独的SQL查询。
I hope the following may help you.
$query = "SELECT * FROM Dishes INNER JOIN Category
ON Dishes.id = Category.id ORDER BY Dishes.id";
$res = $mysqli->query($query);
while($row = $res->fetch_assoc())
{
$AllDishes[$$row['category_name']][] = array(
'id' => $row['id'],
'Name' => $row['Name'],
'Description' =>
$row['Description'],
'cat_id' =>
$row['cat_id'],
'Price' => $row['Price'],
'ImagePath' =>
$row['ImagePath']
);//Array Close
}
https://stackoverflow.com/questions/46012840
复制相似问题