2015-05-01 4 views
0

У меня возникли проблемы с выбором данных из моей базы данных с использованием данных из предыдущего выбора. Я хочу это сделать. Сначала я разрешаю mysql выбирать все vechiles из моей базы данных из таблицы vechiles. Я повторяю их и внутри цикла while. Я пытаюсь выбрать изображение для vechile из таблицы с разницей, выбрав изображение с помощью vechile_id:Mysql выбрать несколько запросов внутри eachother

Теперь мой первый вопрос. Правильно ли это? Я предполагаю, что должен быть более аккуратный способ, но я не могу найти, как это сделать.

<?php 
      $sql = "SELECT id, brand FROM vechiles"; 
      $result = $conn->query($sql); 

      if ($result->num_rows > 0) { 
       while($row = $result->fetch_assoc()) { 

        $sql1 = "SELECT * FROM fotos WHERE vechiles_id =". $row['id']; 
        $result1 = $conn->query($sql1); 

        echo '<li><p class="title">'. $row['brand'] .'</p> 
          <p class="type">type: 2387</p> 
          <p class="ez">ez: 1987</p>'; 

          if ($result1->num_rows > 0) { 
          // output data of each row 
          while($row1 = $result1->fetch_assoc()) { 
           echo '<img src="admin/'. $row1['url'] .'" atl="tractor 1"/>'; 
          }}else{ 
           echo "there are no pictures"; 
          } 

          echo '<div class="info"> 
          <p class="prijs">Prijs: 1800,- EX BTW</p> 
          <p class="msg"> Prijzen onder voorgehoud</p> 
          </div> 
          <a class="button" href="#">Meer info</a></li>'; 
       } 
      } else { 
       echo "0 results"; 
      } 
      $conn->close(); 
     ?> 

Noe приведенный выше пример работает отлично, но я хочу, чтобы выбрать только первый снимок вместо всех загруженных изображений. Так этот код:

$sql1 = "SELECT * FROM fotos WHERE voertuig_id =". $row['id']; 

Я добавил

$sql1 = "SELECT TOP 1 * FROM fotos WHERE voertuig_id =". $row['id']; 

И я также попытался

$sql1 = "SELECT * FROM fotos WHERE voertuig_id =". $row['id'] . "LIMIT 1"; 

Но когда я что он вдруг говорит, что нет фотографий. Что я делаю не так!

оцените всю помощь!

+0

Вы должны сделать это в одном запросе, с присоединиться –

ответ

1

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

select * 
    from vehicles v 
    left join fotos f 
     on f.voertuig_id = v.id; 

Если для этого транспортного средства нет соответствующего фото, оно будет иметь нулевое значение в возвращаемом массиве.

Это изменит ваш PHP на что-то вроде этого:

$last_vehicle = null; 
if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
    if($row['brand'] != $last_vehicle) { 
     if($last_vehicle != null) { 
     echo '<div class="info"> 
       <p class="prijs">Prijs: 1800,- EX BTW</p> 
       <p class="msg"> Prijzen onder voorgehoud</p> 
       </div> 
       <a class="button" href="#">Meer info</a></li>'; 
     } 
     echo '<li><p class="title">'. $row['brand'] .'</p> 
      <p class="type">type: 2387</p> 
      <p class="ez">ez: 1987</p>'; 
      $last_vehicle = $row['brand'];       
     if ($row['url'] != null) { 
     echo '<img src="admin/'. $row['url'] .'" atl="tractor 1"/>'; 
     } 
     else { 
     echo "there are no pictures"; 
     }  
    } 
    } 
} 
else { 
    echo "0 results"; 
} 
+0

Aah Thanx. Я пробовал это сейчас. Но теперь вместо того, чтобы выбирать все vechiles и распечатывать их (4 vechiles), теперь он распечатывает vechile для каждого изображения. Поэтому, когда voertuig_id имеет 10 фотографий. он будет эхом - это vechile 10 раз. –

+0

Итак, что я хочу сделать, выберите al vechiles (4) из таблицы vechile, эхо их. и выберите первое изображение, которое принадлежит каждому vechile –

+0

, просто отследите последний автомобиль, который вы напечатали, и только распечатывайте его снова, если он изменится. –