Как получить результаты в то время как цикл - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть следующие 2 таблицы.

| ID | Name        | Category |
|----|-------------|----------|
|  1 | Foo bar     | 3        |
|  2 | Bar foo     | 2        |
|  3 | Baz Foo     | 3        |
|  4 | Baz Foo2    | 1        |
|  5 | Baz Foo3    | 1        |
|  3 | Baz Foo     | 1        |

| ID | Category_name |
|----|---------------|
|  1 | Cat 111       | 
|  2 | Cat 222       | 
|  3 | Cat 3333      | 

Я хочу отобразить все категории со счетчиком, например:

Cat111 - 3
Cat222 - 2
Cat333 - 2

Я пытался сделать это следующим образом, но он не работает:

$query = mysqli_query('SELECT * FROM gallery');

while($row = mysqli_fetch_assoc($query)) {
    $query_cat = mysqli_query($conn, "SELECT * FROM `pics_cat` WHERE id = '".$row['category']."' GROUP BY category_name"); 
    $rowCat = mysqli_fetch_assoc($query_cat);
    echo $rowCat['category_name'];
    echo $rowCat['cnt'];
}

1 Ответ

0 голосов
/ 19 ноября 2018

Вы не разделяете имена таблиц, но я предполагаю, что первая - Gallery, а вторая - pics_cat

Если ваши таблицы не будут очень большими, я предлагаювам нужно решить все с помощью одного запроса на соединение, что упрощает логику вашего сценария.

$query = mysqli_query($conn, 'SELECT p.Category_name,COUNT(g.ID) AS cnt FROM `gallery` AS g LEFT JOIN `pics_cat` AS p ON p.ID = g.Category GROUP BY p.ID');

while($row = mysqli_fetch_assoc($query)) {
    echo $rowCat['Category_name'];
    echo $rowCat['cnt'];
}

Если вы предпочитаете делать это с двумя запросами в цикле, гораздо проще начать с таблицы Category изатем перейти в галерею

$query = mysqli_query($conn, 'SELECT * FROM `pics_cat` ORDER BY ID');

while($row = mysqli_fetch_assoc($query)) {
    $query_count = mysqli_query('SELECT COUNT(ID) AS cnt FROM `gallery` WHERE Category = '.$row['ID'].'');
    $row_count = mysqli_fetch_assoc($query_count);
    echo $row['Category_name'];
    echo $row_count['cnt'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...