2011-02-07 248 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']; 
}