Как ВЫБРАТЬ из MySQL и правильно отображать результаты с переполнением стека

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

Я постараюсь кратко объяснить, что я пытаюсь сделать. Моя таблица 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 как я хочу их, однако я сталкиваюсь с одной проблемой:

  1. Я получаю $rs_variant->fields['variant'] перечислены только для первого model_body, <div>для второго, третьего и так далее уникального model_bodyс пустыми. Как сделать так, чтобы цикл отображал варианты для другого соответствующего model_body?

Это то, что я получаю сейчас со вторым циклом (я думаю, проблема в самом цикле):

A - ooo     Va1
Va4
Va5
A - www

B - sss

B - jjj

Спасибо!

-1

Решение

Замечания:

  • я использовал ORDER BY по вашему запросу.
  • Сравнил модель а также model_body к следующему циклу модель а также model_body.
  • Больше объяснений внутри кода, указанного в /* */
  • Не нужно создавать сложный вложенный цикл.
  • Используемый MySQLi подготовил заявление вместо устарел MySQL. Читайте здесь, чтобы узнать больше о Инъекции SQL.

Код:

<?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 */

?>
0

Другие решения

Вот решение, которое я выбрал — если оно кому-нибудь поможет:

<?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(); } ?>
0

По вопросам рекламы [email protected]