Чтение одной записи за раз по идентификатору главного родителя с использованием условного оператора

У меня есть 3 таблицы пригородов, свойств и изображений. пригород - родительский стол таблицы свойств во взаимосвязи "один-ко-многим", а изображение является дочерним таблица свойств таблица в отношении "один ко многим".

Я хочу отображать одно изображение за раз по идентификатору пригорода, которое будет отсортировано (ЗАКАЗАТЬ) по идентификатору недвижимости.

После итерации все изображения отображаются правильно. Но я не могу выяснить, как отображать каждую строку за раз, используя условный оператор, идентификатор пригорода (идентификатор главной родительской таблицы).

Ниже приведены тестовые примеры, в которых я пробовал разные решения:

Тестовый пример 1: Итерация, отображающая все изображения

$query = "SELECT i.*, p.property_id, s.suburb_id 
          FROM property_images i
          LEFT JOIN properties p
          ON i.property_id = p.property_id
          LEFT JOIN suburbs s
          ON p.suburb_id = s.suburb_id   
          WHERE s.suburb_id = 60                      
          ORDER BY p.property_id";

$result = $conn->query($query);

$images = array();

foreach($result as $row){
   extract($row);
   $images[] = $image_location . '<br />';
}

print_r($images);

/*
  Output:

  Array ( [0] => public/images/properties/uploads/1.jpg
  [1] => public/images/properties/uploads/2.jpg
  [2] => public/images/properties/uploads/3.jpg
  [3] => public/images/properties/uploads/4.jpg
  [4] => public/images/properties/uploads/5.jpg
  [5] => public/images/properties/uploads/6.jpg
  [6] => public/images/properties/uploads/7.jpg
  [7] => public/images/properties/uploads/8.jpg
  [8] => public/images/properties/uploads/9.jpg
  [9] => public/images/properties/uploads/10.jpg
  [10] => public/images/properties/uploads/11.jpg
  [11] => public/images/properties/uploads/12.jpg
  [12] => public/images/properties/uploads/13.jpg
  [13] => public/images/properties/uploads/14.jpg
  [14] => public/images/properties/uploads/15.jpg
  [15] => public/images/properties/uploads/16.jpg
  [16] => public/images/properties/uploads/17.jpg
  [17] => public/images/properties/uploads/18.jpg
)
*/

Тестовый пример 2: сравнение $ image_id, если он равен эквивалентной строке

 $query = "SELECT i.*, p.property_id, s.suburb_id 
           FROM property_images i
           LEFT JOIN properties p
           ON i.property_id = p.property_id
           LEFT JOIN suburbs s
           ON p.suburb_id = s.suburb_id   
           WHERE s.suburb_id = 60                     
           ORDER BY p.property_id";

$counter = mysqli_num_rows($result);

$image_id = $row['property_image_id'];
$image_location = $row['image_location'];

if ($counter > 0){
     if ($image_id == 1){
         print_r($image_location);
     }
 }

 //Here the first row is returned 

/*
 Output:

  public/images/properties/uploads/1.jpg
*/

Тестовый пример 3: сравнение $ image_id, если он равен строке номер 2

 $query = "SELECT i.*, p.property_id, s.suburb_id 
           FROM property_images i
           LEFT JOIN properties p
           ON i.property_id = p.property_id
           LEFT JOIN suburbs s
           ON p.suburb_id = s.suburb_id   
           WHERE s.suburb_id = 60                     
           ORDER BY p.property_id";

$counter = mysqli_num_rows($result);

$image_id = $row['property_image_id'];
$image_location = $row['image_location'];

if ($conter > 0){
     if ($image_id == 2){
         print_r($image_location);
     }
 }

 //Here it returns null/empty 

/*
 Output: (not output)

*/

Я хочу знать, почему тестовый пример 2 вернул первую строку, а тестовый пример 3 не прошел?

Мне нужно получить одно изображение отдельно для каждого запроса на основе идентификатора пригорода (удостоверение личности дедушки и бабушки)

Рассмотрим псевдокод ниже:

 1. if image ID is equal to 1, return the first row of ImageURL.
 2. if image ID is equal to 2, return the second row of ImageURL. 
 3. if image ID is equal to 3, return the third row of ImageURL.
 4. else return the first row.

Я по ошибке забыл присвоить результат переменной $ row в тестовом примере 2 и 3. Когда я попытался выполнить запросы, он вернул пустой набор результатов.

Лучшим подходом было использование цикла foreach для извлечения данных из результата и проверки равенства строк. Вышеупомянутый подход реализован в следующем фрагменте кода.

$query = "SELECT i.*, p.property_id, s.suburb_id 
                      FROM property_images i
                      LEFT JOIN properties p
                      ON i.property_id = p.property_id
                      LEFT JOIN suburbs s
                      ON p.suburb_id = s.suburb_id   
                      WHERE s.suburb_id = 60                      
                      ORDER BY p.property_id";
            $result = $conn->query($query);

            $images = array();


            foreach($result as $row){
                extract($row);
                //$images[] = $image_location . '<br />';
                if ($property_image_id == 1){
                    print_r($image_location);
                }else if ($property_image_id == 2){
                    print_r($image_location);
                }else if ($property_image_id == 3){
                    print_r($image_location);
                }
            }

почему вы не присвоили значение переменной $row в Test case 2 и Test case 3?

FatemehNB 27.10.2018 21:04

Я назначил $ row ['property_image_id'] $ image_id для проверки идентификатора и $ row ['image_location'] $ image_location для проверки imageUrl.

Lawrence E Bosumbe 27.10.2018 21:09

а что такое $row? На самом деле вы не заполнили его в своем коде.

FatemehNB 27.10.2018 21:10

Есть 2 момента: во-первых, вы должны использовать foreach для получения данных из результата запроса. во-вторых, вы уверены, что есть запись с property_image_id = 2?

FatemehNB 27.10.2018 21:20

Понятно, мне нужно использовать цикл foreach для получения данных. Я по ошибке забыл назначить набор результатов в переменной $ row в тестовых примерах 2 и 3. Теперь запросы возвращают строки точно так, как ожидалось. Спасибо FatemehNB, да благословит вас Бог!

Lawrence E Bosumbe 27.10.2018 22:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
22
0

Другие вопросы по теме