Я немного застрял с проблемой, и мне нужна ваша помощь, чтобы определить неправильную часть кода.
Я постараюсь кратко объяснить, что я пытаюсь сделать. Моя таблица 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 следующим образом:
Во-первых, я пытаюсь перечислить один раз содержимое model_body
столбец с помощью SELECT DISTINCT
и оттуда я пытаюсь перечислить каждое другое значение из variant
столбец, который совпадает с тем же model_body
,
A - ooo Va1
Va4
Va5
A - www Va7
B - sss Va2
Va3
B - jjj Va6
Мои 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);
Вот код 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
как я хочу их, однако я сталкиваюсь с одной проблемой:
$rs_variant->fields['variant']
перечислены только для первого model_body
, <div>
для второго, третьего и так далее уникального model_body
с пустыми. Как сделать так, чтобы цикл отображал варианты для другого соответствующего model_body?Это то, что я получаю сейчас со вторым циклом (я думаю, проблема в самом цикле):
A - ooo Va1
Va4
Va5
A - www
B - sss
B - jjj
Спасибо!
ORDER BY
по вашему запросу./* */
Код:
<?php
/* ESTABLISH CONNECTION */
$conn = new mysqli("YourHost", "YourUsername", "YourPassword", "YourDatabaseName"); /* REPLACE THE NECESSARY DATA INSIDE */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$catalogue_make=$_GET['m'];
$previousmodel="";
$previousbody="";
if($stmt=$con->prepare("SELECT model,model_body,variant FROM tbl_catalog ORDER BY model,model_body WHERE make=?")){
$stmt->bind_param('s',$catalogue_make); /* BIND THE VARIABLE TO THE QUERY */
$stmt->execute(); /* EXECUTE QUERY */
?><table border="1"><?
$stmt->bind_result($model,$modelbody,$variant); /* STORE THE RESULTS TO THIS THREE VARIABLES */
while($stmt->fetch()){ /* FETCH DATA INTO A LOOP */
if($previousbody!=$modelbody){ /* COMPARE THE PREVIOUS MODEL BODY TO CURRENT MODEL BODY */
printf("<tr><td>%s - %s</td><td>%s</td></tr>",$model,$modelbody,$variant);
$previousmodel=$model;
$previousbody=$modelbody;
}
else { /* IF MODEL BODY AND CURRENT MODEL BODY IS EQUAL, ONLY THE VARIANT TO BE PRINTED */
printf("<tr><td></td><td>%s</td></tr>",$variant);
$previousmodel=$model;
$previousbody=$modelbody;
} /* END OF ELSE */
} /* END OF LOOP */
?></table><?php
$stmt->close();
} /* END OF PREPARED STATEMENT */
?>
Вот решение, которое я выбрал — если оно кому-нибудь поможет:
<?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(); } ?>