У меня есть 2 таблицы в MySQL;
items
categories
items
иметь cat_id
столбец указывает на их категорию в categories
Таблица
Я использую запрос ниже, чтобы получить предметы и категории;
SELECT a.id, a.cat_id, a.rest_id, a.name, a.description, a.price, b.rest_id, b.name
FROM items a, categories b
WHERE a.cat_id = b.id AND b.rest_id = 1
Я хочу использовать ng-repeat для создания списка, подобного приведенному ниже;
Category A
Item (belongs to cat A)
Item (belongs to cat A)
Item (belongs to cat A)
Category B
Item (belongs to cat B)
Item (belongs to cat B)
Item (belongs to cat B)
Как мне добиться этого с ng-repeat
У меня есть это до сих пор, но не работает;
<div class="results-group" ng-repeat="(key, value) in fetchedData">
<h3 style="text-align: left;"></h3>
<ul>
<li ng-repeat="data in value">
</li>
<ul>
</div>
Благодарю.
$query1 = "SELECT * FROM categories WHERE rest_id = $restaurant_id";
$select_all_cats = mysqli_query($connection, $query1);
$rows = $select_all_cats -> num_rows;
$arr1 = array();
$arr2 = array();
if($rows > 0) {
while($rows = mysqli_fetch_assoc($select_all_cats)) {
$arr1[] = $rows;
$cat_id = $rows['id'];
$query2 = "SELECT * FROM items WHERE cat_id = $cat_id";
$select_all_items = mysqli_query($connection, $query2);
$rowx = $select_all_items -> num_rows;
if($rowx > 0) {
while($rowx = mysqli_fetch_assoc($select_all_items)) {
$arr2[] = $rowx;
}
}
}
}
Во-первых, вы должны удалить вложенные запросы в PHP. Зацикленные / вложенные запросы — это анти-шаблон, который вы должны научиться распознавать и обычно заменять соответствующим запросом, использующим объединения.
Нечто подобное должно сработать на стороне PHP:
// array to store results
$item_array = array();
$query = "SELECT
cat.name AS cat_name,
i.id AS id,
i.name AS name,
i.description AS description,
i.price AS price
FROM categories AS cat
INNER JOIN items AS i
ON cat.id = i.id
WHERE i.rest_id = ?
ORDER BY cat_name ASC";
$result = mysqli_query($connection, $query);
if($result) {
while($row = mysqli_fetch_assoc($result)) {
// read into 2D array
$item_array[$row['cat_name']][] = $row;
}
}
Важно отметить, что здесь мы строим двумерный массив с именем категории, являющимся первым измерением. Затем вы можете использовать это с ng-repeat следующим образом. Обратите внимание, что я собираюсь ссылаться на данные в $item_array
выше как itemData
Вот. Также обратите внимание, что itemData
, когда отформатирован для javascript будет принимать форму объекта. Каждый из категории «свойства» на itemData
будет содержать численно индексированный массив записей элементов.
<div class="results-group" ng-repeat="(cat, items) in itemData">
<h3 style="text-align: left;">{{cat}}</h3>
<ul>
<li ng-repeat="item in items">
<!-- output content from item here like {{item.name}} and similar -->
</li>
<ul>
</div>
Других решений пока нет …