稍微不同的替代方案應該去。與將所有數據讀入數組相比,這將節省內存。
每次名稱更改對象未設置(觸發__destruct函數輸出信息),新創建的對象
<?php
mysql_connect("#######", "########", "######") or die(mysql_error());
mysql_select_db("#####") or die(mysql_error());
echo "<h3>Members:</h3>";
$result = mysql_query("SELECT boder_boder_id, medlemmer_medlemmer_id, medlemmer_navn, medlemmer_id, boder_navn, boder_id, boder_pris
FROM boder_has_medlemmer,
medlemmer,
boder
WHERE boder_boder_id = boder_id
AND medlemmer_medlemmer_id = medlemmer_id");
if (mysql_num_rows($result) == 0)
{
echo "Query returned 0 rows";
}
else
{
$prev_medlemmer_navn = '';
while($row = mysql_fetch_array($result))
{
if ($prev_medlemmer_navn != $row['medlemmer_navn'])
{
unset($member_output);
$member_output = new member_output($row['medlemmer_navn']);
$prev_medlemmer_navn = $row['medlemmer_navn'];
}
$member_output->add_row($row['boder_navn'], $row['boder_pris'])
}
unset($member_output);
}
class member_output
{
private $medlemmer_navn = '';
private $details = array();
private $samlet = 0;
public function __CONSTRUCT($medlemmer_navn)
{
$this->medlemmer_navn = $medlemmer_navn;
}
public function __DESTRUCT()
{
echo "<p>";
echo $this->medlemmer_navn.'<br />';
foreach ($this->details as $detail)
{
echo $detail['boder_navn'].'<br />';
echo $detail['boder_pris'].' kr.<br />';
}
echo $this->samlet.'<br />';
echo "</p>";
}
public function add_row($boder_navn, $boder_pris)
{
$this->details[] = array('boder_navn'=>$boder_navn, 'boder_pris'=>$boder_pris);
$this->samlet += $boder_pris;
}
}
?>
或者你也可以推動工作到MySQL的的多,分組的細節一起所以每個名字一行,然後爆炸其餘的字段。
<?php
mysql_connect("#######", "########", "######") or die(mysql_error());
mysql_select_db("#####") or die(mysql_error());
echo "<h3>Members:</h3>";
$result = mysql_query("SELECT medlemmer_navn, medlemmer_id, GROUP_CONCAT(CONCAT_WS('~~', boder_navn, boder_pris) SEPARATOR '##') AS details, SUM(boder_pris) AS samlet
FROM boder_has_medlemmer,
medlemmer,
boder
WHERE boder_boder_id = boder_id
AND medlemmer_medlemmer_id = medlemmer_id
GROUP BY medlemmer_navn, medlemmer_id");
if (mysql_num_rows($result) == 0)
{
echo "Query returned 0 rows";
}
else
{
while($row = mysql_fetch_array($result))
{
echo "<p>";
echo $row['medlemmer_navn'].'<br />';
$details = explode('##', $row['details']);
foreach ($details as $detail)
{
list($boder_navn, $boder_pris) = explode('~~', $detail);
echo $boder_navn.'<br />';
echo $boder_pris.' kr.<br />';
}
echo $row['samlet'].'<br />';
echo "</p>";
}
}
?>
還是有點髒,建立在sql內的html。
<?php
mysql_connect("#######", "########", "######") or die(mysql_error());
mysql_select_db("#####") or die(mysql_error());
echo "<h3>Members:</h3>";
$result = mysql_query("SELECT medlemmer_navn, medlemmer_id, GROUP_CONCAT(CONCAT(boder_navn, '<br />', boder_pris, 'kr.', '<br />')) AS details, SUM(boder_pris) AS samlet
FROM boder_has_medlemmer,
medlemmer,
boder
WHERE boder_boder_id = boder_id
AND medlemmer_medlemmer_id = medlemmer_id
GROUP BY medlemmer_navn, medlemmer_id");
if (mysql_num_rows($result) == 0)
{
echo "Query returned 0 rows";
}
else
{
while($row = mysql_fetch_array($result))
{
echo "<p>";
echo $row['medlemmer_navn'].'<br />';
echo $row['details'];
echo $row['samlet'].'<br />';
echo "</p>";
}
}
?>
是的,我知道這個想法很愚蠢,正如我指出的:)我會馬上測試你的建議。 – 2014-09-10 09:32:07
完美的作品! Thx m8 :) – 2014-09-10 09:36:00