Wątek przeniesiony 2016-12-19 14:45 z Bazy danych przez somekind.

Podwójne wyniki po zapytaniu MySQL

0

Witam wszystkich!

Ponieważ męczę się z problemem już jakiś czas zdecydowałem się napisać na forum bo już mi ręce opadają.
Mam takie zapytanie:

 $zapytanie = "
 
SELECT DISTINCT o.orders_id, o.date_purchased, o.delivery_name, o.delivery_street_address, o.delivery_postcode,
     o.delivery_city, o.shipping_module, o.customers_telephone, o.customers_email_address,
     op.products_quantity, op.products_price, op.products_name, ot.value AS koszty_przesylki
      FROM orders o
      LEFT JOIN orders_products op ON op.orders_id = o.orders_id
     LEFT JOIN orders_total ot ON ot.orders_id = o.orders_id WHERE ot.sort_order = 15
     ORDER BY orders_id";

 
 $wynik = mysql_query($zapytanie);

  
  
 while ( $row = mysql_fetch_assoc($wynik) ) {
 

   echo    "<table width='1210px' style='margin-bottom:20px; text-align:center; font-size:14px;'>";
   
   echo    "<tr bgcolor='#ccc'>";
   echo    "<td width='30px' style='border: solid 1px; padding-left:3px;'><b>ID</b></td>";
   echo    "<td width='70px' style='border: solid 1px'><b>DATA</b></td>";
   echo    "<td width='100px' style='border: solid 1px'><b>KLIENT</b></td>";
   echo    "<td width='50px' style='border: solid 1px'><b>KOD</b></td>";
   echo    "<td width='100px' style='border: solid 1px'><b>ADRES</b></td>";
   echo    "<td width='70px' style='border: solid 1px'><b>MIASTO</b></td>";
   echo    "<td width='60px' style='border: solid 1px'><b>TELEFON</b></td>";
   echo    "<td width='150px' style='border: solid 1px'><b>EMAIL</b></td>";   
   echo    "<td width='300px' style='border: solid 1px'><b>NAZWA PRODUKTU</b></td>";   
   echo    "<td width='20px' style='border: solid 1px'><b>ILOŚĆ</b></td>";
   echo    "<td width='20px' style='border: solid 1px'><b>CENA</b></td>";
   echo    "<td width='100px' style='border: solid 1px'><b>WYSYŁKA</b></td>";
   echo    "<td width='20px' style='border: solid 1px'><b>SUMA</b></td>";
    echo    "</tr>";
    
   echo    "<tr>";
    echo    "<td width='30px' style='border: solid 1px'>" . $row['orders_id']. "</td>";
   echo    "<td width='70px' style='border: solid 1px'>" . $row['date_purchased']. "</td>";
   echo   "<td width='100px' style='border: solid 1px'>" . $row['delivery_name'] . "</td>"; 
   echo   "<td width='50px' style='border: solid 1px'>" . $row['delivery_postcode'] . "</td>";
   echo   "<td width='100px' style='border: solid 1px'>" . $row['delivery_street_address'] . "</td>"; 
   echo   "<td width='70px' style='border: solid 1px'>" . $row['delivery_city'] . "</td>";   
   echo   "<td width='60px' style='border: solid 1px'>" . $row['customers_telephone'] . "</td>";   
   echo   "<td width='150px' style='border: solid 1px'>" . $row['customers_email_address'] . "</td>";
   echo    "<td width='300px' style='border: solid 1px'>" . $row['products_name'] . "</td>";     
   echo    "<td width='20px' style='border: solid 1px'>" . $row['products_quantity'] . "</td>";
    echo    "<td width='20px' style='border: solid 1px'>" . $row['products_price'] . "</td>";
   echo   "<td width='100px' style='border: solid 1px'>" . $row['shipping_module']. " " . $row['koszty_przesylki'] . "</td>";
   
$suma_zakupow = (($row['products_quantity']*$row['products_price'])+$row['koszty_przesylki']);
   
   echo   "<td width='20px' style='border: solid 1px'>" . $suma_zakupow . "</td>";      
   echo    "</tr>";  
   
   echo    "</table>";

Efekt jest taki, że dane wyświetla mi poprawnie z jednym wyjątkiem. W bazie produkty do każdego zamówienia zapisane są w kolejnych wierszach. Jeśli klient zamówi jeden produkt jest spoko. Jeśli zamówi więcej produktów zaczyna się zabawa bo wyświetlają się kolejne tabelki z nazwą klienta itd. (w każdej jeden produkt). Chciałbym aby do każdego klienta sumowało jego produkty i wyświetlało wszystko w jednej tabelce a nie w kilku.
Pomóżcie bo nie mam już siły kombinować..

0

Nie widzę w kodzie gdzie kończysz pętle, ale powinieneś generować nagłówek przed wypisaniem zawartości zamówienia:

$zapytanie = "

SELECT DISTINCT o.orders_id, o.date_purchased, o.delivery_name, o.delivery_street_address, o.delivery_postcode,
     o.delivery_city, o.shipping_module, o.customers_telephone, o.customers_email_address,
     op.products_quantity, op.products_price, op.products_name, ot.value AS koszty_przesylki
      FROM orders o
      LEFT JOIN orders_products op ON op.orders_id = o.orders_id
     LEFT JOIN orders_total ot ON ot.orders_id = o.orders_id WHERE ot.sort_order = 15
     ORDER BY orders_id";

 $wynik = mysql_query($zapytanie);

 echo    "<table width='1210px' style='margin-bottom:20px; text-align:center; font-size:14px;'>";

   echo    "<tr bgcolor='#ccc'>";
   echo    "<td width='30px' style='border: solid 1px; padding-left:3px;'><b>ID</b></td>";
   echo    "<td width='70px' style='border: solid 1px'><b>DATA</b></td>";
   echo    "<td width='100px' style='border: solid 1px'><b>KLIENT</b></td>";
   echo    "<td width='50px' style='border: solid 1px'><b>KOD</b></td>";
   echo    "<td width='100px' style='border: solid 1px'><b>ADRES</b></td>";
   echo    "<td width='70px' style='border: solid 1px'><b>MIASTO</b></td>";
   echo    "<td width='60px' style='border: solid 1px'><b>TELEFON</b></td>";
   echo    "<td width='150px' style='border: solid 1px'><b>EMAIL</b></td>";   
   echo    "<td width='300px' style='border: solid 1px'><b>NAZWA PRODUKTU</b></td>";   
   echo    "<td width='20px' style='border: solid 1px'><b>ILOŚĆ</b></td>";
   echo    "<td width='20px' style='border: solid 1px'><b>CENA</b></td>";
   echo    "<td width='100px' style='border: solid 1px'><b>WYSYŁKA</b></td>";
   echo    "<td width='20px' style='border: solid 1px'><b>SUMA</b></td>";
    echo    "</tr>";


 while ( $row = mysql_fetch_assoc($wynik) ) {

  
   echo    "<tr>";
    echo    "<td width='30px' style='border: solid 1px'>" . $row['orders_id']. "</td>";
   echo    "<td width='70px' style='border: solid 1px'>" . $row['date_purchased']. "</td>";
   echo   "<td width='100px' style='border: solid 1px'>" . $row['delivery_name'] . "</td>"; 
   echo   "<td width='50px' style='border: solid 1px'>" . $row['delivery_postcode'] . "</td>";
   echo   "<td width='100px' style='border: solid 1px'>" . $row['delivery_street_address'] . "</td>"; 
   echo   "<td width='70px' style='border: solid 1px'>" . $row['delivery_city'] . "</td>";   
   echo   "<td width='60px' style='border: solid 1px'>" . $row['customers_telephone'] . "</td>";   
   echo   "<td width='150px' style='border: solid 1px'>" . $row['customers_email_address'] . "</td>";
   echo    "<td width='300px' style='border: solid 1px'>" . $row['products_name'] . "</td>";     
   echo    "<td width='20px' style='border: solid 1px'>" . $row['products_quantity'] . "</td>";
    echo    "<td width='20px' style='border: solid 1px'>" . $row['products_price'] . "</td>";
   echo   "<td width='100px' style='border: solid 1px'>" . $row['shipping_module']. " " . $row['koszty_przesylki'] . "</td>";

$suma_zakupow = (($row['products_quantity']*$row['products_price'])+$row['koszty_przesylki']);

   echo   "<td width='20px' style='border: solid 1px'>" . $suma_zakupow . "</td>";      
   echo    "</tr>";  
//kod którego nie wkleiłes
// ta linijka powinna być po zakończeniu pętli
}
   echo    "</table>";

Zapytanie zrobione w ten sposób może zwrócić błędne dane, zastanów sie co bedzie jak w zamówieniu bedziesz miał 2x ten sam produkt po 2 sztuki?

0

Dzięki za reakcję. Właśnie chodzi o większą ilość produktów. Z jednym nie ma problemu. Teraz próbuję zrobić to w ten sposób ale coś się zapętla.

 $zapytanie = "
 
 SELECT DISTINCT o.orders_id, o.date_purchased, o.delivery_name, o.delivery_street_address, o.delivery_postcode,
	             o.delivery_city, o.shipping_module, o.customers_telephone, o.customers_email_address, o.invoice_dokument, 
	             op.products_quantity, op.products_price_tax, op.products_name, ot.value AS koszty_przesylki, o.payment_method 
	  
	  FROM orders o, orders_products op, orders_total ot, orders_status_history os 
      
	  WHERE
	  
	  EXISTS (SELECT op.orders_id FROM orders_products op       WHERE op.orders_id = o.orders_id) AND 
	  EXISTS (SELECT ot.orders_id FROM orders_total ot          WHERE ot.orders_id = o.orders_id) AND 
	  EXISTS (SELECT os.orders_id FROM orders_status_history os WHERE os.orders_id = o.orders_id) AND 
	 
	  ot.sort_order = 15 AND 
	  o.orders_status = 4 
	  
	  ORDER BY o.orders_id
	  
	  ";
		  
 $wynik = mysql_query($zapytanie);
  
 while ( $row = mysql_fetch_assoc($wynik) ) {
 
 

	echo    "<table width='1100px' cellpadding='8' style='margin-bottom:5px; text-align:center; font-size:19px;'>";
	
	echo    "<tr bgcolor='#ccc'>";
	echo    "<td width='30px' style='border: solid 1px; padding-left:3px;'><b>NR</b></td>";
	echo    "<td width='110px' style='border: solid 1px'><b>DATA</b></td>";
	echo    "<td width='150px' style='border: solid 1px'><b>KLIENT</b></td>";
	echo    "<td width='40px' style='border: solid 1px'><b>TELEFON</b></td>";
	echo    "<td width='150px' style='border: solid 1px'><b>WYSYŁKA</b></td>";
	echo    "<td width='90px' style='border: solid 1px'><b>PŁATNOŚĆ</b></td>";
	echo    "</tr>";
	echo 	"<tr>";
    echo 	"<td width='30px' style='border: solid 1px'>" . $row['orders_id']. "</td>";
	echo 	"<td width='110px' style='border: solid 1px'>" . $row['date_purchased']. "</td>";
	echo	"<td width='150px' style='border: solid 1px'>" . $row['delivery_name'] . "<br>" . $row['delivery_street_address'] . "<br>" . $row['delivery_postcode'] . " " . $row['delivery_city'] ."</td>"; 	
	echo	"<td width='30px' style='border: solid 1px'>" . $row['customers_telephone'] . "</td>";	
	echo	"<td width='150px' style='border: solid 1px'>" . $row['shipping_module']. " <div style='font-weight:bold;'>" . $row['koszty_przesylki'] . " zł</div></td>";
	echo	"<td width='90px' style='border: solid 1px'>" . $row['payment_method'] . "</td>";
	echo    "</tr>";
	echo    "</table>";
	
	if ( $row['invoice_dokument'] == 1 ) { $dokument = "Faktura"; }  else { $dokument = "Paragon"; };	
	echo "<div style='width:60px; border:solid 1px; font-weight:bold; background:#ccc; padding: 4px; margin-left:2px;'>" . " " . $dokument . "</div>";
	
	
	echo    "<table width='1100px' cellpadding='8' style='margin-bottom:30px; margin-top:5px; text-align:center; font-size:18px;'>";
	echo    "<tr bgcolor='#ccc'>";
	echo    "<td width='300px' style='border: solid 1px'><b>NAZWA PRODUKTU</b></td>";	
	echo    "<td width='20px' style='border: solid 1px'><b>ILOŚĆ</b></td>";
	echo    "<td width='20px' style='border: solid 1px'><b>CENA</b></td>";
	echo    "<td width='20px' style='border: solid 1px'><b>RAZEM</b></td>";
    echo    "</tr>";
    echo 	"<tr>";
	echo    "<td width='300px' style='border: solid 1px'>" . $row['products_name'] ."</td>";  	
	echo    "<td width='20px' style='border: solid 1px'>" . $row['products_quantity'] . "</td>";
    echo    "<td width='20px' style='border: solid 1px'>" . $row['products_price_tax'] . "</td>";
	
$suma_zakupow = (($row['products_quantity'] * $row['products_price_tax']) + $row['koszty_przesylki']);
	
	echo	"<td width='20px' style='border: solid 1px'>" . $suma_zakupow . " zł</td>";		
	echo    "</tr>"; 
    echo    "</table>";
}


 if ( !mysql_close() ) {
    echo 'Nie moge zakonczyc polaczenia z baza danych';
    exit (0);
 }
0

Na obecną chwilę działa takie coś dla jednego produktu:

 $zapytanie = "
 
 SELECT DISTINCT o.orders_id, o.date_purchased, o.delivery_name, o.delivery_street_address, o.delivery_postcode,
	             o.delivery_city, o.shipping_module, o.customers_telephone, o.customers_email_address, o.invoice_dokument, 
	             op.products_quantity, op.products_price_tax, op.products_name, ot.value AS koszty_przesylki, o.payment_method 
	  
	  FROM orders o, orders_products op, orders_total ot, orders_status_history os 
      
	  WHERE 
	  op.orders_id = o.orders_id AND 
	  ot.orders_id = o.orders_id AND 
	  os.orders_id = o.orders_id AND 
	  ot.sort_order = 15 AND 
	  o.orders_status = 1 
	  
	  ORDER BY o.orders_id
	  
	  ";
		  
 $wynik = mysql_query($zapytanie);
  
 while ( $row = mysql_fetch_assoc($wynik) ) {
 
 

	echo    "<table width='1100px' cellpadding='8' style='margin-bottom:5px; text-align:center; font-size:19px;'>";
	
	echo    "<tr bgcolor='#ccc'>";
	echo    "<td width='30px' style='border: solid 1px; padding-left:3px;'><b>NR</b></td>";
	echo    "<td width='110px' style='border: solid 1px'><b>DATA</b></td>";
	echo    "<td width='150px' style='border: solid 1px'><b>KLIENT</b></td>";
	echo    "<td width='40px' style='border: solid 1px'><b>TELEFON</b></td>";
	echo    "<td width='150px' style='border: solid 1px'><b>WYSYŁKA</b></td>";
	echo    "<td width='90px' style='border: solid 1px'><b>PŁATNOŚĆ</b></td>";
	echo    "</tr>";
	echo 	"<tr>";
    echo 	"<td width='30px' style='border: solid 1px'>" . $row['orders_id']. "</td>";
	echo 	"<td width='110px' style='border: solid 1px'>" . $row['date_purchased']. "</td>";
	echo	"<td width='150px' style='border: solid 1px'>" . $row['delivery_name'] . "<br>" . $row['delivery_street_address'] . "<br>" . $row['delivery_postcode'] . " " . $row['delivery_city'] ."</td>"; 	
	echo	"<td width='30px' style='border: solid 1px'>" . $row['customers_telephone'] . "</td>";	
	echo	"<td width='150px' style='border: solid 1px'>" . $row['shipping_module']. " <div style='font-weight:bold;'>" . $row['koszty_przesylki'] . " zł</div></td>";
	echo	"<td width='90px' style='border: solid 1px'>" . $row['payment_method'] . "</td>";
	echo    "</tr>";
	echo    "</table>";
	
	if ( $row['invoice_dokument'] == 1 ) { $dokument = "Faktura"; }  else { $dokument = "Paragon"; };	
	echo "<div style='width:60px; border:solid 1px; font-weight:bold; background:#ccc; padding: 4px; margin-left:2px;'>" . " " . $dokument . "</div>";
	
	
	echo    "<table width='1100px' cellpadding='8' style='margin-bottom:30px; margin-top:5px; text-align:center; font-size:18px;'>";
	echo    "<tr bgcolor='#ccc'>";
	echo    "<td width='300px' style='border: solid 1px'><b>NAZWA PRODUKTU</b></td>";	
	echo    "<td width='20px' style='border: solid 1px'><b>ILOŚĆ</b></td>";
	echo    "<td width='20px' style='border: solid 1px'><b>CENA</b></td>";
	echo    "<td width='20px' style='border: solid 1px'><b>RAZEM</b></td>";
    echo    "</tr>";
    echo 	"<tr>";
	echo    "<td width='300px' style='border: solid 1px'>" . $row['products_name'] ."</td>";  	
	echo    "<td width='20px' style='border: solid 1px'>" . $row['products_quantity'] . "</td>";
    echo    "<td width='20px' style='border: solid 1px'>" . $row['products_price_tax'] . "</td>";
	
$suma_zakupow = (($row['products_quantity'] * $row['products_price_tax']) + $row['koszty_przesylki']);
	
	echo	"<td width='20px' style='border: solid 1px'>" . $suma_zakupow . " zł</td>";		
	echo    "</tr>"; 
    echo    "</table>";
}


 if ( !mysql_close() ) {
    echo 'Nie moge zakonczyc polaczenia z baza danych';
    exit (0);
 }
1

Poczytaj komentarze w kodzie

//UŻYWAJ JOIN W ZAPYTANIU, BO JAK BEDZIESZ WRACAŁ DO KODU TO NIE POŁAPIESZ SIĘ W TYM
$zapytanie = "

 SELECT DISTINCT 
	o.orders_id    
	, o.date_purchased    
	, o.delivery_name    
	, o.delivery_street_address    
	, o.delivery_postcode    
	, o.delivery_city    
	, o.shipping_module    
	, o.customers_telephone    
	, o.customers_email_address    
	, o.invoice_dokument    
	, op.products_quantity    
	, op.products_price_tax    
	, op.products_name    
	, ot.value AS koszty_przesylki    
	, o.payment_method 
FROM 
	orders o    
	INNER JOIN orders_products op ON op.orders_id = o.orders_id
	INNER JOIN orders_total ot ON ot.orders_id = o.orders_id
	INNER JOIN orders_status_history os ON  os.orders_id = o.orders_id
WHERE 
    ot.sort_order = 15 
	AND o.orders_status = 1 
ORDER BY 
    o.orders_id
      ";

 $wynik = mysql_query($zapytanie);
// TA PĘTLA JEST NIECZYTELNA PRZEZ TE ECHO WYDZIEL TO DO OSOBNYCH FUNKCJI
//poza tym musisz dodać w pętli znacznik że zmienia ci sie order id, aby zacząć generowac dokument na nowo
$orderID = "";
 while ( $row = mysql_fetch_assoc($wynik) ) {
	//jeżeli rozpoczynam zamowienie
	if ($orderID!=$row['orders_id']) {
		//zakończ poprzednie, ale nie dla pierwszego
		if ($orderID != "") {
			echo    "</table>";
		}
		//generyj nagłówek zamowienia
		createHeaderHTML($row);
		//rozpocznij tabelę paragonu/faktury
		startInvoiceHTML($row);
		//zaznacz które zamowienie procesujesz
		$orderID=$row['orders_id'];
	}
	//generuj szczegóły faktury/zamowienia
    invoiceDetailHTML($row);

    
}

 if ( !mysql_close() ) {
    echo 'Nie moge zakonczyc polaczenia z baza danych';
    exit (0);
 }
 function createHeaderHTML($row) {
	echo    "<table width='1100px' cellpadding='8' style='margin-bottom:5px; text-align:center; font-size:19px;'>";
    echo    "<tr bgcolor='#ccc'>";
    echo    "<td width='30px' style='border: solid 1px; padding-left:3px;'><b>NR</b></td>";
    echo    "<td width='110px' style='border: solid 1px'><b>DATA</b></td>";
    echo    "<td width='150px' style='border: solid 1px'><b>KLIENT</b></td>";
    echo    "<td width='40px' style='border: solid 1px'><b>TELEFON</b></td>";
    echo    "<td width='150px' style='border: solid 1px'><b>WYSYŁKA</b></td>";
    echo    "<td width='90px' style='border: solid 1px'><b>PŁATNOŚĆ</b></td>";
    echo    "</tr>";
    echo    "<tr>";
    echo    "<td width='30px' style='border: solid 1px'>" . $row['orders_id']. "</td>";
    echo    "<td width='110px' style='border: solid 1px'>" . $row['date_purchased']. "</td>";
    echo    "<td width='150px' style='border: solid 1px'>" . $row['delivery_name'] . "<br>" . $row['delivery_street_address'] . "<br>" . $row['delivery_postcode'] . " " . $row['delivery_city'] ."</td>";  
    echo    "<td width='30px' style='border: solid 1px'>" . $row['customers_telephone'] . "</td>";  
    echo    "<td width='150px' style='border: solid 1px'>" . $row['shipping_module']. " <div style='font-weight:bold;'>" . $row['koszty_przesylki'] . " zł</div></td>";
    echo    "<td width='90px' style='border: solid 1px'>" . $row['payment_method'] . "</td>";
    echo    "</tr>";
    echo    "</table>";
 }
 function startInvoiceHTML($row){
	if ( $row['invoice_dokument'] == 1 ) { 
		$dokument = "Faktura"; 
	}  else { 
		$dokument = "Paragon"; 
	}
	echo "<div style='width:60px; border:solid 1px; font-weight:bold; background:#ccc; padding: 4px; margin-left:2px;'>" . " " . $dokument . "</div>";
    echo    "<table width='1100px' cellpadding='8' style='margin-bottom:30px; margin-top:5px; text-align:center; font-size:18px;'>";
    echo    "<tr bgcolor='#ccc'>";
    echo    "<td width='300px' style='border: solid 1px'><b>NAZWA PRODUKTU</b></td>";   
    echo    "<td width='20px' style='border: solid 1px'><b>ILOŚĆ</b></td>";
    echo    "<td width='20px' style='border: solid 1px'><b>CENA</b></td>";
    echo    "<td width='20px' style='border: solid 1px'><b>RAZEM</b></td>";
    echo    "</tr>";
 }
 function invoiceDetailHTML($row) {
	$suma_zakupow = (($row['products_quantity'] * $row['products_price_tax']) + $row['koszty_przesylki']); 
    echo    "<tr>";
    echo    "<td width='300px' style='border: solid 1px'>" . $row['products_name'] ."</td>";    
    echo    "<td width='20px' style='border: solid 1px'>" . $row['products_quantity'] . "</td>";
    echo    "<td width='20px' style='border: solid 1px'>" . $row['products_price_tax'] . "</td>";
    echo    "<td width='20px' style='border: solid 1px'>" . $suma_zakupow . " zł</td>";     
    echo    "</tr>"; 
 }
0

Dziękuję Ci za pomoc. Jesteś jedyną osobą która zdecydowała się pomóc.

Serwer nie może teraz obsłużyć tego żądania.
HTTP ERROR 500

Gdzieś jest błąd.. tylko gdzie?

0

Kolego jesteś wielki !!

Działa!!

Napisz na [email protected] gdzie mieszkasz to wysyłam piwo :)
Na święta nie dojdzie ale wielki szacun ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1