Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 消除重复的客户id';mysql查询中的s_Php_Sorting_Mysql - Fatal编程技术网

Php 消除重复的客户id';mysql查询中的s

Php 消除重复的客户id';mysql查询中的s,php,sorting,mysql,Php,Sorting,Mysql,我最初是从一组客户中选择客户,然后为每个客户查询过去几天的记录并将其显示在表行中。 所有的工作都很好,但我想我可能太雄心勃勃了,因为我听说多个查询是一个很大的禁忌,所以我试图一次把所有的记录都拿出来 下面是我提出的一个mysqlquery,它可以一次提取所有记录 SELECT morning, afternoon, date, date2, fname, lname, customers.customerid FROM customers LEFT OUTER JOIN attend ON (

我最初是从一组客户中选择客户,然后为每个客户查询过去几天的记录并将其显示在表行中。 所有的工作都很好,但我想我可能太雄心勃勃了,因为我听说多个查询是一个很大的禁忌,所以我试图一次把所有的记录都拿出来

下面是我提出的一个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中是可能的,如果我将相关的表连接在一起作为一行(这绝对是相对于嵌套查询的最佳实践,应该在大多数情况下尽可能完成),我倾向于通过代码将格式设置为整洁的表

(由于我不记得PHP,所以提供了伪代码):


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

您能用SQL实现吗?也许吧,但我怀疑它是否好看

下面是简单的PHP解决方案

$mornings_by_customer = array();
foreach ($result as $r) {
    $mornings_by_customer[$r['customerid']][] = $r['morning'];
}
一个结果数据结构的例子和一个你想要的例子——用PHP的数组表示法——可以让我给你一个更准确的答案。不过,这应该会给你一个大致的想法。

基于我试图帮助你解决的这个问题,我知道你对数组感到不舒服。但是,如果你要编写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";
 }
}

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

为了解决我需要使用的数组元素,我需要使用双括号,即$customer\u数组[0][lname],$customer\u数组[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++;
    }
     }

for($x=0;$xsorry我应该添加它不是我实际使用的组我试图弄清楚我的循环是while($row1=$db->fetch_row($extract1)),所以我可以只使用while!($row1=$db->fetch_row($extract1))?还是文件的EOF?我的意思是EOF是“没有更多记录了”。在第一行之外做一次fetch_row(获取第一行),然后还将fetch_行置于“//移动到下一条记录”我希望能够做数组,我确实需要学习,但发现它们很难。sql的结果是10天记录40个客户,即400行,每行包含客户详细信息和上午销售和下午销售。我需要数组为客户id1、姓名、姓氏、上午1、下午1、上午2等客户id2,,等等,然后以某种方式进入,但老实说,我真的很难做到这一点,谢谢编辑。在尝试攀登阵列山24小时后,我终于解决了它。我将把我的情况作为一个答案,因为我觉得我简单的看待事物的方式可能会帮助其他人,但如果你能够将你的答案编辑为更一般的答案方法(使用$morningArray作为$key,而不仅仅是一个数字循环),我会将其标记为正确的,因为您帮助我理解,即使有人努力尝试,他们也无法帮助,除非我知道问题所在,我只能通过处理数组来做到这一点。
 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++;
    }
     }