[英]PHP MySQL multiple queries into one
我正在嘗試找到一種更好的方式來顯示我的實體關系。 我的數據庫包含3個表:成員,費用和fee_has_members。
一名會員可以收取多項費用,反之亦然。 問題是當我想顯示所有成員及其相應的費用時,我的while循環遍歷所有實體並在每次循環時顯示所有信息。
循環顯示如下:
Member A
Fee B
200 $
Member A
Fee C
230 $
Member A
Fee B
200 $
我想向會員顯示一次以及所有相關費用。
編碼:
<?php
mysql_connect("#######", "########", "######") or die(mysql_error());
mysql_select_db("#####") or die(mysql_error());
?>
<h3>Members:</h3>
<?php
$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");
?>
<?php
if (mysql_num_rows($result) == 0)
echo "Query returned 0 rows";
?>
<?php
$samlet = 0;
while($row = mysql_fetch_array($result))
{ ?>
<p>
<?php
echo $row[medlemmer_navn].'<br>';
echo $row[boder_navn].'<br>';
echo $row[boder_pris].' kr.';
$samlet += $row[boder_pris];
?>
</p>
我知道我可以更改MySQL查詢以包括特定的成員名稱,但是隨后我將不得不運行30個查詢以顯示所有成員及其費用。
我希望我能說清楚。
有什么建議么?
您對每個成員的查詢的想法很愚蠢:D
嘗試這個。
<?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))
{
echo 'Query returned 0 rows';
}
$samlet = 0;
$medlemmers = array();
while($row = mysql_fetch_array($result))
{
$medlemmers[$row['medlemmer_navn']][] = $row;
}
foreach($medlemmers as $navn => $medlemmer)
{
echo '<p>';
echo $navn . '<br />';
foreach($medlemmer as $row)
{
echo $row['boder_navn'] . '<br />';
echo $row['boder_pris'] . ' kr.';
$samlet += $row['boder_pris'];
}
echo '</p>';
}
它未經測試,但應該朝正確的方向^^
使用對象的方式略有不同。 與將所有數據讀入數組相比,這將節省內存。
每次更改名稱時,都會取消設置對象(觸發__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>";
}
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.