Добрый день :)
У меня есть 2 таблицы - одна содержит основные заголовки, а другая - подзаголовки и связанные абзацы, которые связаны с внешним ключом на TitleID и LinkID, как показано здесь:
Идея состоит в том, что я создаю несколько разделов, содержащих основные заголовки - из sectionamain со связанным субконтентом из sectiona, связанным через LinkID и TitleID.
<?php
function confirm_query($result_set) {
if (!$result_set) {
die("Database query failed.");
}
}
function get_practices() {
global $connection;
$query = "SELECT * FROM sectionamain ";
$query .= "LEFT JOIN sectiona ";
$query .= "ON sectiona.HeadingID = sectionamain.TitleID ";
$query .= "ORDER BY sectionamain.TitleID ASC";
$A_list = mysqli_query($connection, $query);
confirm_query($A_list);
return $A_list;
}
function display_practices() {
$output = "<div class=\"container inner\">\n";
$A_set = get_practices();
while ($list_A = mysqli_fetch_assoc($A_set)) {
$output .= "<div class=\"info\">\n";
$output .= "<div class=\"wrap\">\n";
$output .= "<h1 class=\"showcontent\" id = ";
$output .= "". htmlentities($list_A["TitleID"]) ."";
$output .= ">";
$output .= htmlentities($list_A["MainTitle"]);
$output .= "</h1>\n";
$output .= "<div class=\"content\" id=\"content".htmlentities($list_A["TitleID"]) ."\">\n";
*** code would go here -
put items from sectiona with LinkID = 1 where TitleID = 1, etc until all data is sorted
$output . = "</div>\n</div>\n</div>\n";
};
mysqli_free_result($A_set);
$output .= "</div>\n";
return $output;
}
?>
The end result would be something as shown below:
<h1>Main Title 1</h1>
<h3>Sub 1 with LinkID 1<h1>
<h3> ... </h3>
<h3>Sub n with LinkID 1</h3>
...
<h1>Main Title n</h1>
<h3>Sub 1 with LinkID n<h1>
<h3> ... </h3>
<h3>Sub n with LinkID n</h3>
заранее спасибо хх
В чем проблема ?
Приносим извинения за непонятность вещей - мне нужно получить данные из разделов с заголовками в виде субтитров, отсортированных по идентификатору заголовка.
Ваш запрос неоднозначен в инструкции select. Вместо использования подстановочного знака укажите, какие именно поля вы хотите извлечь. Я напишу ответ.
О, если подумать, это может не быть проблемой. По-прежнему рекомендуется указывать, к каким полям вы хотите получить доступ. Можете ли вы получить результаты любой из БД?
@TimMorton - я буду использовать большинство результатов из моей таблицы.






Чтобы решить проблему с группировкой, нужно создать структуру данных в массиве. Поскольку в базе данных будут строки с повторяющейся информацией, используйте эту повторяющуюся информацию как ключ в массиве.
<?php
function get_practices() {
global $connection;
// It's good practice to specify which fields you want to get from the database.
// for clarity, I'm using heredoc format.
$query = >>>SECTIONAQUERY
SELECT am.TitleID, am.MainTitle, a.HeadingID, a.title, a.content
FROM sectionamain am
LEFT JOIN sectiona a
ON a.HeadingID = am.TitleID
ORDER BY sectionamain.TitleID ASC
SECTIONAQUERY;
$A_list = mysqli_query($connection, $query);
confirm_query($A_list);
return $A_list;
}
/**
* group_items
*
* takes database results and groups them by ID
*
* @param mysqli_result
* @return array
*/
function group_items($db_results) {
$data = array();
while($row = mysqli_fetch_assoc($db_results)) {
$title_id = htmlentities($row['TitleID']);
// group Main Title by title id
$data[$title_id]['title'] = htmlentities($row['MainTitle']);
// group data by title id
$data[$title_id]['data'][] = array(
'HeadingID' => htmlentities($row['HeadingID']),
'title' => htmlentities($row['title']),
'content' => htmlentities($row['content'])
);
}
return $data;
}
Тогда, на ваш взгляд, у вас могло бы получиться что-то вроде этого:
<?php
$A_list = get_practices();
$data = group_items($A_list);
// or, alternatively, $data = group_items(get_practices());
// now, go into "html mode" instead of in PHP,
// using PHP only for looping and variable substitution:
?>
<html>
<head>
...
</head>
<body>
<div>Your header stuff</div>
<div class = "info">
<div class = "wrap">
<?php foreach($data as $row): ?>
<h1 class = "showcontent" id = "<?= $row['title'] ?>"></h1>
<?php foreach($row['data'] as $sub_row): ?>
<h3><?= $sub_row['title'] ?></h3>
<div class = "content"><?= $sub_row['content'] ?></div>
<!-- bonus: link to a new page? -->
<div><a href = "detail_page.php?id=<?= $sub_row['HeadingID'] ?>"><?= $sub_row['title'] ?></a></div>
<?php endforeach; ?>
<?php endforeach; ?>
</div>
</div>
</body>
</html>
Заметьте, я лично не стал бы вставлять вывод в функцию; это смешение логики и презентации. Используя встроенные шаблоны PHP, вам не нужно беспокоиться об экранировании кавычек. Просто используйте синтаксис <?= ?> для добавления переменных PHP. Используйте оператор include вместо вызова функции. (или вы всегда можете использовать функцию include в частичном представлении.)
Надеюсь, это ответ на ваш вопрос!
По какой-то причине $ row ['HeadingID'] выдает неопознанную ошибку индекса.
сделайте var_dump($row), чтобы увидеть, как ему следует назвать. Похоже на опечатку.
Я сделал это, но до сих пор возникают проблемы. Но в остальном я заставил это работать. :)
Спасибо, что поделились своей историей! Есть ли у вас актуальный вопрос или вы просто хотите сообщить нам о своем прогрессе?