我已经“按顺序”将数据库按照递增的国家/地区顺序排列,然后是下降年份。每个数据库记录包含:countryname,year,details。有许多重复的国家,但年份不同。例如:
Albania, 2000, details
Albania, 1965, details
Croatia, 2014, details
Croatia, 2003, details
无法弄清楚如何回应数组以获得如下所示的结果,其中国家/地区位于一行,而且年份和数量相同。下面列出了详细信息,但没有重复国家名称:
Albania
2000, details
1965, details
Croatia
2014, details
2003, details
好像我需要foreach独特的国家,回声年份和细节?
到目前为止,这是我的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 /> ";
}
感谢任何帮助,我很难过!
答案 0 :(得分:2)
尝试添加国家/地区支票:
$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 /> ";
}
这应该有效,因为您已按国家/地区订购了查询。这很关键,否则你绝对应该在SQL中添加GROUP BY
子句。
编辑:要在群组周围添加<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中,因此您可以在jQuery中将其与toggle
一起使用。
答案 1 :(得分:0)
您可以使用嵌套的while循环。您可能还想使用PDO / mysqli函数/预处理语句代替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'];
}
}
答案 2 :(得分:0)
循环派对!
$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);
}