Я «заказал» базу данных в порядке возрастания по стране, а затем по убыванию. Каждая запись базы данных содержит: название страны, год, детали. Есть много стран-дубликатов, но годы разные. Например:
Albania, 2000, details
Albania, 1965, details
Croatia, 2014, details
Croatia, 2003, details
Не могу понять, как отобразить массив, чтобы получить результаты, подобные следующим, где страна находится на одной строке и годах & подробности приведены ниже без дублирования названия страны:
Albania
2000, details
1965, details
Croatia
2014, details
2003, details
Кажется, мне нужна каждая страна, год и детали?
Вот мой php:
$result = mysql_query("SELECT country, year, details FROM studies ORDER BY country, year DESC ");
//output data from each row in db
while($row = mysql_fetch_array($result)) {
echo " Country: " .$row['country']. "<br /> Year: " .$row['year']. " Details: ".$row['details']. "<br /><br /> ";
}
Буду признателен за любую помощь, я в тупике!
Попробуйте добавить проверку страны:
$newcountry = '';
while($row = mysql_fetch_array($result)) {
if ($newcountry != $row['country']) {
echo "Country:". $row['country']."<br />";
$newcountry = $row['country'];
}
echo " Year: " .$row['year']. " Details: ".$row['details']. "<br /><br /> ";
}
Это должно работать, потому что вы заказали свой запрос по стране. Это очень важно, в противном случае вы должны абсолютно добавить GROUP BY
пункт к вашему SQL.
РЕДАКТИРОВАТЬ: добавить <div>
Вокруг группы вы просто изменили бы последовательность эхосигналов, сначала проверив, была ли страна уже установлена один раз. Это будет выглядеть так:
$newcountry = 'undefined';
while($row = mysql_fetch_array($result)) {
if ($newcountry !='undefined' && $newcountry != $row['country']){
echo '</div>'; // only add a closing div if a new country (and not 1st)
}
if ($newcountry != $row['country']) {
echo "Country:". $row['country']."<br /><div class='countryDetail'>";
$newcountry = $row['country'];
}// added the start of the <div>
echo " Year: " .$row['year']. " Details: ".$row['details']. "<br /><br /> ";
}
if ($newcountry != 'undefined') { //make sure at least one <div> is set
echo "</div>"; // close the last <div>
}
Я добавил класс countryDetail
в DIV, так что вы можете использовать это с toggle
в вашем JQuery.
Вы можете использовать вложенные циклы while. Вы также можете использовать PDO / mysqli_ functions / подготовленные операторы вместо mysql_ функций:
// get unique country list first
$sql1 = "SELECT DISTINCT(country) FROM studies ORDER BY country";
$result1 = mysql_query($sql1);
// iterate through result set of sql1
while($row1 = mysql_fetch_array($result1))
{
$country = $row1['country'];
echo "<br>"; // new line
echo $country;
// get year, details for each country
$sql2 = "SELECT year, details FROM studies WHERE country = '$country' ORDER BY year DESC";
$result2 = mysql_query($sql2);
// iterate through result set of $sql2
while ($row2 = mysql_fetch_array($result2))
{
echo "<br>"; // new line
echo $row2['year']. ", " . $row2['details'];
}
}
круглая вечеринка!
$rows = [];
while($row = mysql_fetch_array($result)) {
$rows[ $row['country'] ] = [ $row['year'], $row['details'] ];
}
foreach($rows as $country => $row) {
$details = array_map(function($items) { return sprintf("\t - %s: %s\n", $items[0], $items[1]) }, $row);
echo sprintf("\n%s:\n %s", $country, $details);
}