У меня есть 3 таблицы пригородов, свойств и изображений. пригород - родительский стол таблицы свойств во взаимосвязи "один-ко-многим", а изображение является дочерним таблица свойств таблица в отношении "один ко многим".
Я хочу отображать одно изображение за раз по идентификатору пригорода, которое будет отсортировано (ЗАКАЗАТЬ) по идентификатору недвижимости.
После итерации все изображения отображаются правильно. Но я не могу выяснить, как отображать каждую строку за раз, используя условный оператор, идентификатор пригорода (идентификатор главной родительской таблицы).
Ниже приведены тестовые примеры, в которых я пробовал разные решения:
$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
)
*/
$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
*/
$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 ['property_image_id'] $ image_id для проверки идентификатора и $ row ['image_location'] $ image_location для проверки imageUrl.
а что такое $row? На самом деле вы не заполнили его в своем коде.
Есть 2 момента: во-первых, вы должны использовать foreach для получения данных из результата запроса. во-вторых, вы уверены, что есть запись с property_image_id = 2?
Понятно, мне нужно использовать цикл foreach для получения данных. Я по ошибке забыл назначить набор результатов в переменной $ row в тестовых примерах 2 и 3. Теперь запросы возвращают строки точно так, как ожидалось. Спасибо FatemehNB, да благословит вас Бог!






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