mysql sorgusunda tekrarlanan müşteri id yıllardan kurtulmak

4 Cevap php

I originally started by selecting customers from a group of customers and then for each customer querying the records for the past few days and presenting them in a table row. All working fine but I think I might have got too ambitious as I tried to pull in all the records at once having heard that mutiple queries are a big no no.

Burada ben bir kez tüm kayıtları çekmek için geldi mysqlquery olduğunu

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 

tablolar, müşteri-> CustomerId, fname, lName vardır

katılmak-> CustomerId, sabah, öğleden sonra, tarih

noattend-> date2 (tüm gün bir tablo boşlukları doldurmak için)

Now the problem I have is how to start a new row in the table when the customer id changes My query above pulls in

Müşteri 1 sabah 2

Müşteri 1 sabah 1

Müşteri 2 sabah 2

Müşteri 2 sabah 1

Ben almaya çalışıyorum oysa

Customer1 morning2 morning1

customer2 morning2 morning1

Ben bu php sql veya daha büyük olasılıkla mümkün olup olmadığını bilmiyorum

4 Cevap

Sonunda ne eksikti çalıştı.

In order to address the element of the array I needed to use, I needed to use a double bracket ie $customer_array[0][lname], $customer_array[1][lname]. I realise this is probably obvious to most but it was completely eluding me. The key to my understanding this was
print_r(customer_array) which I'd seen a lot but never got working properly.

Sonra tüm veritabanı satırları çekerek sadece bir olgu oldu:

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

ve sonra kayıtları sabit bir numarası olarak döngü:

 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++;
    }
     }

Bu başkası yardımcı olur umarım.

Ben kodu ile düzgün tablolarına biçimlendirme yapmak eğilimindedir (iç içe sorgular karşı ve zaman zaman çoğunluk olarak yapılmalı kesinlikle bir iyi uygulama olan) bir satır için birlikte ilgili tabloların katılmadan yaşıyorum.

(I PHP hatırlamıyorum olarak verilmiştir pseudocode):

// 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
}

Her müşteri üzerinde dış döngü yinelenir ve bu müşteri için ilişkisel veri üzerinden iç döngü yinelenir.

Eğer SQL ile elde edebilirsiniz? Belki, ama bu güzel bakmak istiyorum şüpheliyim.

İşte kolay PHP çözümdür.

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

PHP'nin dizi gösterimde - - senin sonuç veri yapısı ve yerine olurdu ne bir örnek bir örnek beni size daha kesin bir cevap vermek için izin verecek. Bu, ancak, size genel bir fikir vermelidir.

Bu near identical problem Seni çözmeye yardımcı olmak için çalışıyorum göre de, ben size diziler ile rahatsız olduğunu biliyorum. Ama sen burada yapmak istiyorum görünüyor gibi boyutlu olanlar ile uğraşmak gerekir, özellikle PHP kodlama için gidiyoruz eğer bunları öğrenmek zorunda gidiyoruz.

$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";
 }
}