Задать вопрос
Yastr
@Yastr

Как вывести позиции из бд по значению одного поля (php, mysqli)?

Подскажите пожалуйста, как мне вывести только те позиции, у которых определенное значение поля g_id?

Делаю так:
$db = new mysqli("localhost", "root", "", "gallery"); 
$items = $db->query ("SELECT * FROM table"); 

while ($row = $items->fetch_assoc())
echo '
<img src="'.$row["img_1"].'" alt="">
<img src="'.$row["img_2"].'" alt="">
<textarea readonly name="text" placeholder="размеры">'.$row["text"].'</textarea>';


Понятное дело, выводится все. Знаю, что можно при запросе к базе указать WHERE g_id=1, но на странице будут выводится 3-5 блока в разных местах и каждый раз делать запрос насколько я понимаю уж слишком затратно.

Возможно ли полученный массив $items раздробить на маленькие по значению g_id, или может просто по другому цикл можно составить, чтобы в нем присутствовало это условие?

b85e6328eeb246868c2aceac34ad7073.png
  • Вопрос задан
  • 573 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
chlp
@chlp
фулстек
Можешь в цикле пропускать не нужное:
$db = new mysqli("localhost", "root", "", "gallery"); 
$items = $db->query ("SELECT * FROM table"); 

while ($row = $items->fetch_assoc())
{
    if ($row['g_id'] != 1) continue;
    echo '
    <img src="'.$row["img_1"].'" alt="">
    <img src="'.$row["img_2"].'" alt="">
    <textarea readonly name="text" placeholder="размеры">'.$row["text"].'</textarea>';
}


либо сначала подготовить массивы по искомому ключу:
$db = new mysqli("localhost", "root", "", "gallery"); 
$items = $db->query ("SELECT * FROM table"); 
$itemsByG = array();
while ($row = $items->fetch_assoc())
{
    if(!isset($itemsByG[$row['g_id']]))
    {
        $itemsByG[$row['g_id']] = array();
    }
    $itemsByG[$row['g_id']][] = $row;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Построй индекс по полю g_id и со спокойной душой делай where
Ответ написан
Tesla
@Tesla
Можно просто использовать кеширование для 3-5 блоков.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы