php sql loop метод - PullRequest
       4

php sql loop метод

1 голос
/ 25 ноября 2011

Мне нужен запрос, который зацикливает данные из двух таблиц. У меня есть две таблицы: VEHICLES и VEHICLES_DB.

Таблица VEHICLES_DB представляет собой список всех различных типов транспортных средств в базе данных, включая их скорость, изображение, название и т. Д.

Таблица VEHICLES - это список всех транспортных средств, и к какому члену он тоже принадлежит. Он просто содержит столбцы id, type и member. Столбец типа указывает, к какому транспортному средству относится VEHICLES_DB.

У меня есть страница, которая показывает вам все ваши транспортные средства, сгруппированные по каждому типу. Затем для каждого сгруппированного типа необходимо обратиться к таблице VEHICLES_DB, чтобы получить информацию об этих транспортных средствах. Что-то вроде:

$sql_result = mysql_query("SELECT * FROM vehicles WHERE member='$your_id' GROUP BY type", $db); 
while ($rs = mysql_fetch_array($sql_result)) {
    $sql_result2 = mysql_query("SELECT * FROM vehicles_db WHERE type='$rs[type]'", $db);
    $rs2 = mysql_fetch_array($sql_result2);

    // display vehicle 

    }

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

PS: Я еще не очень хорошо разбираюсь в JOIN.

Ответы [ 4 ]

1 голос
/ 25 ноября 2011

2 способа:

1) Присоединить базу данных транспортных средств к транспортным средствам и отобразить ее

2) Кэшировать типы транспортных средств

Начиная с № 2, поскольку его легче показать:

$result = mysql_query("SELECT * FROM vehicles_db", $db);
while($row = mysql_fetch_assoc($result)){
     $typecache[$row['id']] = $row;
}

$sql_result = mysql_query("SELECT * FROM vehicles WHERE member='$your_id' GROUP BY type", $db);
while ($rs = mysql_fetch_array($sql_result)) {

    // display vehicle
    var_dump($typecache[$rs['type']]);
    var_dump($rs);

}

Вторым (решение № 1) будет добавление информации о вашем транспортном средстве (во многих случаях гораздо лучше)

$sql_result = mysql_query("SELECT * FROM vehicles INNER JOIN vehicles_db USING(`type`) WHERE member='$your_id' GROUP BY type", $db);
while ($rs = mysql_fetch_array($sql_result)) {

    // display vehicle
    var_dump($rs);

}

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

0 голосов
/ 25 ноября 2011

Обычный подход - не указывать GROUP BY в первом запросе и JOIN по типу.Что, вероятно, означает зацикливание типа в вашем PHP.

0 голосов
/ 25 ноября 2011
$sql_result = mysql_query("SELECT v.*,vd.* FROM vehicles v LEFT JOIN vehicles_db vd ON (vd.type = v.type) WHERE v.member='$your_id' GROUP BY v.type", $db); 
while ($rs = mysql_fetch_array($sql_result)) {
     // display vehicle 
}

Итак, у вас есть все поля в $rs ассоциативном массиве.

0 голосов
/ 25 ноября 2011

Почему бы не использовать sql JOIN?Это будет делать именно то, что вы хотите:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...