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