在mysql查询中摆脱重复的客户ID

时间:2010-04-22 20:24:46

标签: php sorting mysql

我最初是从一组客户中选择客户,然后是每个客户查询过去几天的记录并将其显示在表格行中。 所有工作正常,但我想我可能有太雄心勃勃,因为我试图立即拉入所有记录,听到多个查询是一个很大的不是没有。

这是我想出来的mysqlquery,可以立即输入所有记录

SELECT morning, afternoon, date, date2, fname, lname,  customers.customerid
FROM customers
LEFT OUTER JOIN attend ON ( customers.customerid = attend.customerid ) 
RIGHT OUTER JOIN noattend ON ( noattend.date2 = attend.date ) 
WHERE noattend.date2
BETWEEN '$date2'
AND '$date3'
AND DayOfWeek( date2 ) %7 >1
AND group ={$_GET['group']}
ORDER BY lname ASC , fname ASC , date2 DESC 

表格是customer-> customerid,fname,lname

出席─>客户ID,上午,下午,日期

noattend-> date2(填写空白的所有日子表)

现在问题是如何在客户ID更改时在表中启动新行 我上面的查询进入

客户1早上2

客户1早上1点

客户2早2点

客户2早上1点

而我正试图

客户1早上2早上1

客户2早上2早晨1

我不知道这是可能在sql中还是更有可能在php中

4 个答案:

答案 0 :(得分:1)

我终于找到了我所缺少的东西。

为了解决我需要使用的数组元素,我需要使用双括号,即$ customer_array [0] [lname],$ customer_array [1] [lname]。我意识到这对大多数人来说可能是显而易见的,但它完全是在逃避我。我理解这一点的关键是 print_r(customer_array),我见过很多但从未正常工作。

然后只是用以下内容拉出所有数据库行:

$customer_array =array();
while($row1=mysql_fetch_assoc($extract1)){
$customer_array[] = $row1; 
}

然后循环,因为我有固定数量的记录:

 for ($x=0;$x<=900;)
{ 
echo $customer_array[$x][fname];
echo$customer_array[$x][lname];
for($y=0;$y<=30;$y++)
{
echo $customer_array[$x][morning];
echo $customer_array[$x][afternoon];
        $x++;
    }
     }

希望这有助于其他人。

答案 1 :(得分:0)

如果我将一行的相关表连接在一起(这绝对是最好的做法而不是嵌套查询,并且应该在大多数情况下尽可能地完成),我倾向于通过以下方式将格式化为整齐的表格代码。

(伪代码提供,因为我不记得PHP):

// query database
while !EOF {
  currentCustomerId = $database["CustomerId"]
  // do opening table row stuff; customer name, etc.
  while !EOF && currentCustomerId == $database["CustomerId"] {
     // do the relational columns from the join
     // move to next record
  }
  // do closing table row stuff
}

外部循环遍历每个客户,内部循环遍历该客户的关系数据。

答案 2 :(得分:0)

你能用SQL实现吗?也许,但我怀疑它看起来不错。

这是简单的PHP解决方案。

$mornings_by_customer = array();
foreach ($result as $r) {
    $mornings_by_customer[$r['customerid']][] = $r['morning'];
}

结果数据结构的一个示例以及您更喜欢的示例 - 在PHP的数组表示法中 - 将允许我给出更准确的答案。但是,这应该给你一般的想法。

答案 3 :(得分:0)

也基于这个near identical problem我试图帮助你解决,我知道你对数组感到不舒服。但是,如果您要编写PHP代码,那么您将不得不学习它们,特别是如果您需要处理多维内容,就像您似乎想要在这里做的那样。

$sql = "SELECT morning, afternoon, date, date2, fname, lname,  customers.customerid
FROM customers
LEFT OUTER JOIN attend ON ( customers.customerid = attend.customerid ) 
RIGHT OUTER JOIN noattend ON ( noattend.date2 = attend.date ) 
WHERE noattend.date2
BETWEEN '$date2'
AND '$date3'
AND DayOfWeek( date2 ) %7 >1
AND group ={$_GET['group']}
ORDER BY lname ASC , fname ASC , date2 DESC ";

$results = mysql_fetch_result($sql);
$customer_array = array()

// Load up an array with each customer id as the key and array full of mornings as the value
while($row = mysql_fetch_array($results)) {
 array_push($customer_array[$row['customerid']], $row['morning']);
}
// For each customer ID, get the array of mornings
foreach ($customer_array as $customerID=>$morningArray) {
 echo $customerID;
 // For each morning array item, echo it out
 forreach ($morningArray as $key=>$value) {
   echo " $value";
 }
}