2011-02-07 244 views
2

我得到的數據,並希望各行從其它表中獲取數據我從數據庫SQL從數據庫中獲取數據

$query = "SELECT use FROM ur WHERE user='Gue'"; 
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)){ 
    echo $row['use']; 
     echo '<br>'; 
} 

現在我想每個$row['use']應該從另一個表「我」

獲取數據
$query = "SELECT SUM(mon) FROM my WHERE use='$use'"; //$use = row['use'] 

$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)){ 
    echo $row['SUM(mon)']; 
} 

有沒有解決方法?

回答

2
select ur.use, sum(my.mon) 
    from ur 
     inner join my 
      on ur.use = my.use 
    where ur.user = 'Gue' 
    group by ur.use 
+0

你能解釋一下嗎? – cute 2011-02-07 20:39:08

+0

+1,這一個查詢**方式比OP的設計更有效率**!爲什麼要獲得SUM所需的所有行,然後一次只獲取一個SUM,而一次只能獲得所有SUM。 – 2011-02-07 20:40:44

0

你要做的是獲得'從你的表中使用'的列表。對於每個「使用」,你都希望得到我的表中具有相同用途的'mon'字段的總和。

把你的第二個查詢放在while循環裏面會有效,但更好的辦法是利用你使用的sql數據庫爲你做過濾。

你在找什麼是一個連接或一個聲明(工作,並在大部分,功能上等價)。

由喬·斯特凡內利給出的答案給出了一個可能的查詢溶液(加入和分組),另一個是這樣的:

select my.use, sum(my.mon) as mon_sum 
from my 
where my.use in (select use from ur where user = 'Gue') 
group by my.use 

這也將正常工作。這個想法是,你按使用分組並得到總和,然後用in語句中的子查詢過濾掉你需要的。

1
$query = "SELECT ur.use, SUM(my.mon) sumMon 
      FROM ur 
      LEFT JOIN my on my.use=ur.use 
      WHERE ur.user='Gue'"; 
$result = mysql_query($query) or die(mysql_error()); 
$use = -1; 
while($row = mysql_fetch_array($result)){ 
    // process the `use` rows. SUM only returns one row, if you were going for 
    // raw records, uncomment the two parts commented out below 
// if ($row['use'] != $use) { 
     echo $row['use']; 
     echo '<br>'; 
//  $use = $row['use']; 
    } 

    // process the `sum` rows, only if there were any records 
    echo $row['sumMon']; 
}