#php #mysql #arrays
#php #mysql #массивы
Вопрос:
У меня есть массив php для отображения информации из базы данных. Я хочу иметь возможность показывать элементы, подобные этому, например. Space Quest (3) ‘(3)’ представляет количество раз, найденных в базе данных. Прямо сейчас он извлекает информацию и выводит результаты столько раз, сколько отображается в базе данных, как это например. Космический квест Космический квест космический квест которые ссылаются на отдельные истории. Вот мой код:
<?php
$type = $_POST['Type'];
$result = mysqli_query($cxn, "SELECT *
FROM Stories
WHERE Type = '$type'");
if($result < 0) {
echo "<center><b>No stories are posted for this category yet.</b></center>";
} else {
while($row = mysqli_fetch_array($result)) {
$title = $row['Title'];
$result2 = mysqli_num_rows($result);
echo "<FORM ACTION ='browse.php' METHOD ='POST'>
<INPUT TYPE = 'Submit' name='cool2' id='cool2' VALUE = '$title'>";
echo "amp;nbsp;amp;nbsp;<font color = '#0000ff''>(" . $result2 . ")";
echo "</form>";
echo "amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;";
}
} ?>
Этот код показывает все элементы, которые поступают из type, но я хочу упорядочить результаты, чтобы показывать элементы только один раз, а затем количество историй в каждой категории.
Ответ №1:
Вместо этого вы должны выполнить следующий запрос
"SELECT Title,count(*) as cnt FROM Stories WHERE Type = '$type' group by Title"
тогда вы получите только разные заголовки, а столбец cnt будет содержать количество раз, когда это происходит.
Ответ №2:
Проблема в том, что вы используете
while($row = mysqli_fetch_array($result))
Это приведет к повторению всех строк в результате. Вместо этого, если вам нужен только первый, выполните
$row = mysqli_num_rows($result);
$occurrences = mysqli_num_rows($result);
// ...
Ответ №3:
Ну, если я правильно понимаю, то вам нужна функция группировки. Например:
select id, title, count( * ) from stories where type = 'ANYTHING' group by id, title
Это что?
Комментарии:
1. В большинстве схем вы, вероятно, не хотели бы, чтобы идентификатор был там таким.
Ответ №4:
Это не ответ на ваш вопрос, но в любом случае это полезная информация:
Ваш SQL-запрос уязвим для атак с использованием SQL-инъекций. Это потому, что вы напрямую вставляете пользовательский ввод (параметр POST) в строку вашего SQL-запроса. Для строковых значений следует использовать функцию escape для строки, которая гарантирует, что строка будет безопасно вставлена в запрос:
$query = "SELECT * FROM Stories WHERE Type = '" . mysqli_real_escape_string($type) . "'";
Также неплохо избегать любых значений, которые вы выводите в свой HTML-код. Это помогает предотвратить атаки с использованием межсайтового скриптинга. Используйте htmlspecialchars()
функцию для этого:
echo "<INPUT TYPE = 'Submit' name='cool2' id='cool2' VALUE = '" . htmlspecialchars($title) . "'>";