Query complessa

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Ciao a tutti.
Espongo il quesito.
Ho una tabella più o meno così. nome "Oggetti"
Id/nome/cognome/indirizzo/venduto_a/descrizione/prezzo/q.tà/id_venditore/venduto/data_vendita/pagato/data_pagamento/reso/data_reso

dovrei con una query, elencare i movimenti effettuati giornalieri.

In pratica devo chiedere: Elenca nome, cognome, indirizzo di chi si registra oggi. Descrizione, prezzo, q.tà, dell'oggetto che porta (che però non è per forza nella stessa riga). Nome, cognome, indirizzo di chi ha la scritta "venduto" nel campo "venduto" ma con data di oggi nel campo "data_vendita" e Descrizione, prezzo, q.tà dell'oggetto (che però non sarà nella stessa riga). Nome, cognome, indirizzo di chi ha la scritta "pagato" nel campo "pagato" ma con data di oggi nel campo "data_reso", descrizione, prezzo, q.tà dell'oggetto.

Impossibile tutto in una query?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
cosa intendi per movimenti e a che data si riferiscono, perche vedo che ci sono tre date
data_vendita
data_pagamento
data_reso
perche in funzione di quale vuoi usare o solo una o, tramite OR, tutte.
altro problemino è sapere come vengono formattate le date in tabella.
es. se sono yyyy.mm.gg => 2010.10.22
con (penso che tu utilizzi php)
PHP:
<?php
//.........
$oggi=date("Y.m.d");//leggi la data di oggi o la inputi tramite form
$query="SELECT * FROM Oggetti WHERE data_vendita='$oggi' OR data_pagamento='$oggi' OR data_reso='$oggi'";
//e ottieni tutti i record con la data odierna in una delle tra date
//.........
?>
questo se non ho capito male il tuo quesito
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Tanto per cominciare, grazie mille per la disponibilità...
Hai capito e risolto in parte il mio problema.
Purtroppo mi manca ancora un passo...
Per legge, questo libro di affari deve avere le diciture per esteso.

Adesso, mi vengono mostrati record del genere:
176 10/10/12 Lampada da cucina con greca marrone 25 1 50 166 254 11/10/12 22/10/12

dove il numero 166 corrisponde al id del Venditore ma lo devo poter inserire per esteso... e il numero 254 corrisponde al numero del compratore e anche lui lo devo leggere per esteso.
Sai come posso fare?
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Ho guardato il link ma mi esplode il cervello...
ti posto lo script com'è...
PHP:
<form align='center' action='provagiornale.php?reg=1' method='POST'>
<input type='text' name='oggi'>
<input type='submit' value='Avvia ricerca'>
</form> 
<?php

 $oggi=$_POST['oggi'];
 $username="XXXXXXXX";
 $password="XXXXXXXXXX";
 $database="XXXXXXXXXXX";
 
 mysql_connect(localhost,$username,$password);
 @mysql_select_db($database) or die("Impossibile selezionare il database.");
 
 $query="SELECT * FROM oggetti WHERE data_vendita='$oggi' OR data_rimborso='$oggi' OR data='$oggi'";
 $risultati=mysql_query($query);
 $num=mysql_numrows($risultati);
 
 mysql_close();

 $i=0;
 while ($i < $num) {
     
     $id=mysql_result($risultati,$i,"id");
     $data=mysql_result($risultati,$i,"data");
     $nome=mysql_result($risultati,$i,"nome");
     $cognome=mysql_result($risultati,$i,"cognome");
     $indirizzo=mysql_result($risultati,$i,"indirizzo");
     $codice_fiscale=mysql_result($risultati,$i,"codice_fiscale");
     
     $descrizione=mysql_result($risultati,$i,"descrizione");
     $prezzo=mysql_result($risultati,$i,"prezzo");
     $quantita=mysql_result($risultati,$i,"quantita");
     $percento=mysql_result($risultati,$i,"percento");
     
     $id_venditore=mysql_result($risultati,$i,"id_venditore");
     $venduto_a=mysql_result($risultati,$i,"venduto_a");
     
 	 $data_vendita=mysql_result($risultati,$i,"data_vendita");
	 $data_rimborso=mysql_result($risultati,$i,"data_rimborso");  
	   
  echo "<table align='center' bgcolor='' border='1' height='' width='90%' cellpadding='0' cellspacing='0'>"; 
echo "<tr> 
<th>Progressivo</th><th>data</th><th>nome</th><th>cognome</th><th>indirizzo</th><th>cod.fisc.</th><th>descrizione oggetto</th><th>prezzo</th><th>quantità</th><th>provvigione %</th><th>venditore</th><th>compratore</th><th>data vendita</th><th>data rimborso</th></tr>"; 
 echo "<td>$id</td><td>$data</td><td>$nome</td><td>$cognome</td><td>$indirizzo</td><td>$codice_fiscale</td><td>$descrizione</td><td>$prezzo</td><td>$quantita</td><td>$percento</td><td>$id_venditore</td><td>$venduto_a</td><td>$data_vendita</td><td>$data_rimborso</td>";
 echo "</tr></table><br>";
     $i++;
 }

 ?>

in pratica al posto di "$id_venditore" e "$venduto_a", dovrei inserire: vai a prendere il $nome,$cognome,$indirizzo del id n. '$id_venditore'

Giusto? Ma come????
Ora leggo meglio il link che mi hai dato...
 
Ultima modifica di un moderatore:

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Per chiarezza, la mia è una sola tabella... che contiene id, nome, cognome, indirizzo, descrizione, q.tà, prezzo ecc...
E ci inserisco o gli utenti o gli oggetti....
Schermata 2012-10-22 alle 21.31.59.pngSchermata 2012-10-22 alle 21.31.41.png
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, puoi provare con una join sulla stessa tabella ( non l'ho mai fatta ma dovrebbe funzionare )
esempio
PHP:
$query="SELECT T1.*,T2.nome as nomevenditore 
                FROM Oggetti T1
                JOIN Oggetti T2 ON T2.id_venditore = T1.id
                WHERE T1.data_vendita='$oggi' OR T1.data_pagamento='$oggi' OR T1.data_reso='$oggi'";
quando recuperi i dati pero devi usare l'alias
PHP:
$percento=mysql_result($risultati,$i,"T1.percento");
per il venditore idem
PHP:
$nomevenditore=mysql_result($risultati,$i,"nomevenditore");
racchiudi il codice che posti tra i tag presenti sulla barra di formattazione ( PHP HTML o CODE ) Altrimenti è poco leggibile
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Ho modificato così...
Ma non mi mostra più nessun record...


PHP:
$query="SELECT T1.*,T2.nome as nomevenditore 
                FROM Oggetti T1
                JOIN Oggetti T2 ON T2.id_venditore = T1.id
                WHERE T1.data_vendita='$oggi' OR T1.data='$oggi' OR T1.data_rimborso='$oggi'";  
                
 $risultati=mysql_query($query);
 $num=mysql_numrows($risultati);
 
 
 mysql_close();

 $i=0;
 while ($i < $num) {
     
     $id=mysql_result($risultati,$i,"T1.id");
     $data=mysql_result($risultati,$i,"T1.data");
     $nome=mysql_result($risultati,$i,"T1.nome");
     $cognome=mysql_result($risultati,$i,"T1.cognome");
     $indirizzo=mysql_result($risultati,$i,"T1.indirizzo");          
     $descrizione=mysql_result($risultati,$i,"T1.descrizione");
     $prezzo=mysql_result($risultati,$i,"T1.prezzo");
     $quantita=mysql_result($risultati,$i,"T1.quantita");
     $percento=mysql_result($risultati,$i,"T1.percento");
     $id_venditore=mysql_result($risultati,$i,"T1.id_venditore");
     $venduto_a=mysql_result($risultati,$i,"T1.venduto_a");
 	 $data_vendita=mysql_result($risultati,$i,"T1.data_vendita");
	 $data_rimborso=mysql_result($risultati,$i,"T1.data_rimborso");  
     $nomevenditore=mysql_result($risultati,$i,"nomevenditore");
  
  echo "<table align='center' bgcolor='' border='0' height='' width='100%' cellpadding='0' cellspacing='0'>"; 
echo "<tr>
<td align='center'></td>
<td align='center'>inserimento</td>
<td align='center'></td>
<td align='center'></td>
<td align='center'></td>
<td align='center'></td>
<td align='center'>prezzo</td>
<td align='center'>quantita'</td>
<td align='center'>provv. %</td>
<td align='center'>venditore</td>
<td align='center'>compratore</td>
<td align='center'>vendita</td>
<td align='center'>rimborso</td>
</tr>"; 

 echo "<tr>
 <td align='center'>$id</td>
 <td align='center'>$data</td>
 <td align='center'>$nome</td>
 <td align='center'>$cognome</td>
 <td align='center'>$indirizzo</td>
 <td align='center'>$descrizione</td>
 <td align='center'>$prezzo</td>
 <td align='center'>$quantita</td>
 <td align='center'>$percento</td>
 <td align='center'>$id_venditore</td>
 <td align='center'>$venduto_a</td>
 <td align='center'>$data_vendita</td>
 <td align='center'>$data_rimborso</td>
 </tr>";
 echo "</table><br>";

     $i++;
 }
 
 ?>
Ora però vado a poggiare lo scheletro che domani mi alzo alle 5.00
Ci sentiamo domani sera... grazie mille.
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Ok, ho sistemato un po'...
cosi':
PHP:
 $query="SELECT T1.*,T2.nome as nomevenditore FROM oggetti T1 JOIN oggetti T2 ON T2.id = T1.id_venditore WHERE T1.data='$oggi' OR T1.data_vendita='$oggi' OR T1.data_rimborso='$oggi'";  
                
 $risultati=mysql_query($query);
 $num=mysql_numrows($risultati);
 
 
 mysql_close();

 $i=0;
 while ($i < $num) {
      
     $id=mysql_result($risultati,$i,"T1.id");
     $data=mysql_result($risultati,$i,"T1.data");
     $nome=mysql_result($risultati,$i,"T1.nome");
     $cognome=mysql_result($risultati,$i,"T1.cognome");
     $indirizzo=mysql_result($risultati,$i,"T1.indirizzo");          
     $descrizione=mysql_result($risultati,$i,"T1.descrizione");
     $prezzo=mysql_result($risultati,$i,"T1.prezzo");
     $quantita=mysql_result($risultati,$i,"T1.quantita");
     $percento=mysql_result($risultati,$i,"T1.percento");
     $id_venditore=mysql_result($risultati,$i,"T1.id_venditore");
     $venduto_a=mysql_result($risultati,$i,"T1.venduto_a");
 	 $data_vendita=mysql_result($risultati,$i,"T1.data_vendita");
	 $data_rimborso=mysql_result($risultati,$i,"T1.data_rimborso");  
     $nomevenditore=mysql_result($risultati,$i,"nomevenditore");
  
  echo "<table align='center' bgcolor='' border='0' height='' width='100%' cellpadding='0' cellspacing='0'>"; 
echo "<tr>
<td align='center'>id</td>
<td align='center'>inserimento</td>
<td align='center'>nome</td>
<td align='center'>cognome</td>
<td align='center'>indirizzo</td>
<td align='center'>descrizione</td>
<td align='center'>prezzo</td>
<td align='center'>quantita'</td>
<td align='center'>provv. %</td>
<td align='center'>venditore</td>
<td align='center'>compratore</td>
<td align='center'>vendita</td>
<td align='center'>rimborso</td>
</tr>"; 

 echo "<tr>
 <td align='center'>$id</td>
 <td align='center'>$data</td>
 <td align='center'>$nome</td>
 <td align='center'>$cognome</td>
 <td align='center'>$indirizzo</td>
 <td align='center'>$descrizione</td>
 <td align='center'>$prezzo</td>
 <td align='center'>$quantita</td>
 <td align='center'>$percento</td>
 <td align='center'>$nomevenditore</td>
 <td align='center'>$venduto_a</td>
 <td align='center'>$data_vendita</td>
 <td align='center'>$data_rimborso</td>
 </tr>";
 echo "</table><br>";

     $i++;
 }
 
 ?>
Mi mostra il nome al posto del campo numerico.
Ma non vedo più i record che hanno '$data' di oggi. Perche probabilmente hanno il campo '$id_venditore' vuoto?
Come faccio?
E se in $nomevenditore oltre al nome, volessi inserire cognome e indirizzo?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Perche probabilmente hanno il campo '$id_venditore' vuoto?
prova con LEFT JOIN al posto di JOIN
volessi inserire cognome e indirizzo?
Codice:
SELECT T1.*,T2.nome as nomevenditore,T2.indirizzo as indirizzorivenditore,T2.cognome as cognomerivenditore
FROM oggetti T1 
LEFT JOIN oggetti T2 ON T2.id = T1.id_venditore
WHERE ... etc
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
in pratica al posto di "$id_venditore" e "$venduto_a", dovrei inserire: vai a prendere il $nome,$cognome,$indirizzo del id n. '$id_venditore'
ma da dove prendi il nome ecc..? hai una tabella venditori? tipo:
id_vend
nome_vend
dove l'i_vend è quello che trovi nella tabella oggetti e che può legare le due tabelle tra loro
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
No Borgo Italia, la tabella è una sola e la uso sia per i nominativi clienti sia per gli oggetti.
Lo script funziona così....

PHP:
 $query="SELECT T1.*,T2.nome as nomevenditore,T2.cognome as cognomevenditore,T2.indirizzo as indirizzovenditore[COLOR="#FF0000"],T3.nome as nomecompratore,T3.cognome as cognomecompratore,T3.indirizzo as indirizzocompratore[/COLOR] 
 FROM oggetti T1 LEFT JOIN oggetti T2 ON T2.id = T1.id_venditore WHERE T1.data='$oggi' OR T1.data_vendita='$oggi' OR T1.data_rimborso='$oggi'";  
                
 $risultati=mysql_query($query);
 $num=mysql_numrows($risultati);
 
 
 mysql_close();

 $i=0;
 while ($i < $num) {
      
     $id=mysql_result($risultati,$i,"T1.id");
     $data=mysql_result($risultati,$i,"T1.data");
     $nome=mysql_result($risultati,$i,"T1.nome");
     $cognome=mysql_result($risultati,$i,"T1.cognome");
     $indirizzo=mysql_result($risultati,$i,"T1.indirizzo");          
     $descrizione=mysql_result($risultati,$i,"T1.descrizione");
     $prezzo=mysql_result($risultati,$i,"T1.prezzo");
     $quantita=mysql_result($risultati,$i,"T1.quantita");
     $percento=mysql_result($risultati,$i,"T1.percento");
     $id_venditore=mysql_result($risultati,$i,"T1.id_venditore");
     $venduto_a=mysql_result($risultati,$i,"T1.venduto_a");
 	 $data_vendita=mysql_result($risultati,$i,"T1.data_vendita");
	 $data_rimborso=mysql_result($risultati,$i,"T1.data_rimborso");  
     $nomevenditore=mysql_result($risultati,$i,"nomevenditore");
	 $cognomevenditore=mysql_result($risultati,$i,"cognomevenditore");
     $indirizzovenditore=mysql_result($risultati,$i,"indirizzovenditore");
     $nomecompratore=mysql_result($risultati,$i,"nomecompratore");
Ma per inserire nome, cognome e indirizzo anche al posto della casella "compratore"?
Ho iniziato, ma non so come andare avanti...(la scritta in rosso)
Ora è così...Schermata 2012-10-23 alle 13.39.51.png
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Come non detto, ho risolto da solo...
PHP:
$query="SELECT T1.*,T2.nome as nomevenditore,T2.cognome as cognomevenditore,T2.indirizzo as indirizzovenditore,T3.nome as nomecompratore,T3.cognome as cognomecompratore,T3.indirizzo as indirizzocompratore 
 FROM oggetti T1 LEFT JOIN oggetti T2 ON T2.id = T1.id_venditore LEFT JOIN oggetti T3 ON T3.id = T1.venduto_a WHERE T1.data='$oggi' OR T1.data_vendita='$oggi' OR T1.data_rimborso='$oggi'";  
                
 $risultati=mysql_query($query);
 $num=mysql_numrows($risultati);
 
 
 mysql_close();

 $i=0;
 while ($i < $num) {
      
     $id=mysql_result($risultati,$i,"T1.id");
     $data=mysql_result($risultati,$i,"T1.data");
     $nome=mysql_result($risultati,$i,"T1.nome");
     $cognome=mysql_result($risultati,$i,"T1.cognome");
     $indirizzo=mysql_result($risultati,$i,"T1.indirizzo");          
     $descrizione=mysql_result($risultati,$i,"T1.descrizione");
     $prezzo=mysql_result($risultati,$i,"T1.prezzo");
     $quantita=mysql_result($risultati,$i,"T1.quantita");
     $percento=mysql_result($risultati,$i,"T1.percento");
     $id_venditore=mysql_result($risultati,$i,"T1.id_venditore");
     $venduto_a=mysql_result($risultati,$i,"T1.venduto_a");
 	 $data_vendita=mysql_result($risultati,$i,"T1.data_vendita");
	 $data_rimborso=mysql_result($risultati,$i,"T1.data_rimborso");  
     $nomevenditore=mysql_result($risultati,$i,"nomevenditore");
	 $cognomevenditore=mysql_result($risultati,$i,"cognomevenditore");
     $indirizzovenditore=mysql_result($risultati,$i,"indirizzovenditore");
     $nomecompratore=mysql_result($risultati,$i,"nomecompratore");
     $cognomecompratore=mysql_result($risultati,$i,"cognomecompratore");
     $indirizzocompratore=mysql_result($risultati,$i,"indirizzocompratore");

  
  echo "<table align='center' bgcolor='' border='0' height='' width='100%' cellpadding='0' cellspacing='0'>"; 
echo "<tr>
<td align='center'>id</td>
<td align='center'>inserimento</td>
<td align='center'></td>
<td align='center'></td>
<td align='center'></td>
<td align='center'></td>
<td align='center'>prezzo</td>
<td align='center'>q.ta'</td>
<td align='center'>provv. %</td>
<td align='center'>venditore</td>
<td align='center'>compratore</td>
<td align='center'>vendita</td>
<td align='center'>rimborso</td>
</tr>"; 

 echo "<tr>
 <td align='center'>$id</td>
 <td align='center'>$data</td>
 <td align='center'>$nome</td>
 <td align='center'>$cognome</td>
 <td align='center'>$indirizzo</td>
 <td align='center'>$descrizione</td>
 <td align='center'>$prezzo</td>
 <td align='center'>$quantita</td>
 <td align='center'>$percento</td>
 <td align='center'>$nomevenditore $cognomevenditore $indirizzovenditore</td>
 <td align='center'>$nomecompratore $cognomecompratore $indirizzocompratore</td>
 <td align='center'>$data_vendita</td>
 <td align='center'>$data_rimborso</td>
 </tr>";
 echo "</table><br>";

     $i++;
 }
 
 ?>

E' possibile nascondere le scritte in alto, laddove non c'è un record?
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
ti basta questo?

PHP:
CREATE TABLE IF NOT EXISTS `oggetti` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `data` varchar(30) NOT NULL,
  `nome` varchar(30) NOT NULL,
  `cognome` varchar(40) NOT NULL,
  `indirizzo` varchar(50) NOT NULL,
  `telefono` varchar(20) NOT NULL,
  `email` varchar(30) NOT NULL,
  `codice_fiscale` varchar(30) NOT NULL,
  `venduto_a` varchar(10) NOT NULL,
  `descrizione` varchar(50) NOT NULL,
  `prezzo` varchar(30) NOT NULL,
  `quantita` varchar(20) NOT NULL,
  `percento` varchar(10) NOT NULL,
  `provvigione` varchar(30) NOT NULL,
  `rimborso` float NOT NULL,
  `id_venditore` varchar(40) NOT NULL,
  `venduto` varchar(20) NOT NULL,
  `data_vendita` varchar(20) NOT NULL,
  `pagamento` varchar(20) NOT NULL,
  `data_rimborso` varchar(20) NOT NULL,
  `link` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='database' AUTO_INCREMENT=1026 ;

--
-- Dump dei dati per la tabella `oggetti`
--

INSERT INTO `oggetti` (`id`, `data`, `nome`, `cognome`, `indirizzo`, `telefono`, `email`, `codice_fiscale`, `venduto_a`, `descrizione`, `prezzo`, `quantita`, `percento`, `provvigione`, `rimborso`, `id_venditore`, `venduto`, `data_vendita`, `pagamento`, `data_rimborso`, `link`) VALUES
(115, '06/10/12', 'Laura', 'Bevinetto', 'Via Colombo, 62/5 Ponsacco', '3478757165', '', 'bvnlra85h46g273p', '', '', '', '', '', '', 0, '', '', '', '', '', ''),
(116, '06/10/12', '', '', '', '', '', '', '', 'Quadro ricamato', '20', '1', '50', '10', 10, '115', 'in vendita', '', '', '', 'link/quadro115.jpeg'),
(117, '06/10/12', '', '', '', '', '', '', '194', 'Tappeto ikea', '20', '1', '50', '10', 10, '115', 'venduto', '15/10/12', '', '', 'link/'),
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
dunque, nessuno ha un idea per non visualizzare le scritte in alto se non è presente alcun contenuto?
1426d1350992436-query-complessa-schermata-2012-10-23-alle-13.39.51.png
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
nessuno ha un idea per non visualizzare le scritte in alto se non è presente alcun contenuto?
ma perche le ripeti per ogni riga?
mettile una volta sola in alto prima del ciclo while
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Si ma ho paura che non vada bene. La legge prevede una cosa senza spazzi bianchi...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
prova cosi
PHP:
<td align='center'><?php echo ($prezzo != "") ? "prezzo" : "" ?></td>
<td align='center'><?php echo ($quantita != "") ? "quantita" : "" ?></td> 
..... etc
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
scusate, ma non capisco una cosa
nella query si fa riferimento ad una sola tabella chiamata
...FROM oggetti...
di cui è stato postato il dump
poi vengono richiamati dei nomi di campo della tabella (es.)
PHP:
$nomevenditore=mysql_result($risultati,$i,"nomevenditore");
ma nel dump tale campo non esiste o è sbagliato il dump o il richiamo