Я немного застрял с while
цикл и нужна помощь, чтобы найти неправильный код.
Моя таблица SQL выглядит примерно так:
make model model_body variant
M1 A ooo Va1
M1 B sss Va2
M1 B sss Va3
M1 A ooo Va4
M1 A ooo Va5
M1 B jjj Va6
M1 A www Va7
Я хотел бы сначала вывести содержимое таблицы в HTML, выполнив GROUP BY
за model_body
значения и список только уникальные с циклом, а затем с помощью второго цикла список всех доступных variant
значения для каждого курса model_body
,
The output should look something like this: However what I end up with is this:
ooo Va1 ooo Va1
Va4 Va4
Va5 Va5
www Va7 www
sss Va2 sss
Va3
jjj Va6 jjj
Вот код PHP, который я написал, я пробовал несколько разных возможностей, но всегда сталкивался с каким-то несоответствием:
<?php while (!$rs_main_model->EOF) { ?>
<div>
<div>
<h2<?php echo $rs_main_model->fields['model']; ?></h2>
</div>
<div>
<?php while (!$rs_variant->EOF) { ?>
<?php echo $rs_variant->fields['variant']; ?>
<?php $rs_variant->MoveNext(); } ?>
</div>
</div>
<?php $rs_main_model->MoveNext(); } ?>
Важно сказать, что если я помещу некоторый текст вместо второго цикла, текст будет отображаться напротив каждого model_body
но когда цикл сделан variant
значения появляются только для первого model_body
а остальные пустые.
Мои SQL-запросы перечислены ниже:
$catalogue_make = $_GET['m'];
$sql_all_models = "SELECT * FROM tbl_catalog WHERE make = '$catalogue_make'";
$rs_all_models = $db -> Execute($sql_all_models);
$sql_main_model = "SELECT * FROM tbl_catalog
WHERE make = '".$rs_all_models->fields['make']."'
GROUP BY model_body";
$rs_main_model = $db -> Execute($sql_main_model);
$sql_variant = "SELECT * FROM tbl_catalog
WHERE model_body = '".$rs_main_model->fields['model_body']."'";
$rs_variant = $db -> Execute($sql_variant);
Вот SQL скрипка из GROUP BY
запросить этот сервер для чего-либо:
http://sqlfiddle.com/#!2/96044/3
Я не уверен, что это должно быть достигнуто с помощью второго цикла, поэтому любые предложения, как сделать эту работу, будут оценены.
РЕДАКТИРОВАТЬ
Это проливает свет на проблему, но все еще не может заставить ее работать в моем коде:
http://board.phpbuilder.com/showthread.php?10373392-RESOLVED-Nested-While-Loops-and-mySQL
Спасибо!
Почему бы не позволить sql сделать всю вашу работу? Вам нужен только один запрос. Этот запрос получает таблицу, которую вы хотите, тогда вы можете использовать только один цикл в php, чтобы просмотреть записи 🙂
SELECT model_body, variant FROM tbl_catalog WHERE make = 'M1' GROUP BY model_body, Variant;
Вот решение, которое я выбрал — если оно кому-нибудь поможет:
<?php while (!$rs_main_model->EOF) { ?>
<div>
<div>
<h2<?php echo $rs_main_model->fields['model']; ?></h2>
<?php $sql_variant = "SELECT * FROM tbl_catalog WHERE model_body = '".$rs_main_model->fields['model_body']."'"; $rs_variant = $db -> Execute($sql_variant); ?>
</div>
<div>
<?php while (!$rs_variant->EOF) { ?>
<?php echo $rs_variant->fields['variant']; ?>
<?php $rs_variant->MoveNext(); } ?>
</div>
</div>
<?php $rs_main_model->MoveNext(); } ?>