Problema con query

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Salve a tutti.
Ho trovato questo forum cercando una soluzione a un problema che mi assilla e vediamo se qualcuno mi saprà dare risposta.
Ragazzi sono alla frutta... sarà la grossa ignoranza, la stanchezza, o che altro, ma mi ritrovo con un enorme confusione in testa.
Dunque vediamo se riesco a spiegarmi.(che già sarebbe una gran cosa)
-Ho una tabella "oggetti"
-La tabella ha molti campi tra cui "id" (incrementale), "id venditore", "rimborso" e "stato"
-id = numero progressivo
-id venditore = numero assegnato da me
rimborso = valuta in euro
stato = testo (in vendita) o (venduto) assegnati da me.

La mia query attuale mi permette di richiamare l'elenco degli oggetti assegnati ad un venditore e vedere tutti gli oggetti venduti e non.

PHP:
$query="SELECT DISTINCT * FROM  `oggetti` WHERE  `$sel` LIKE CONVERT( _utf8 '$txt' USING latin1 ) ORDER BY venduto DESC";
dove $sel e $txt sono i campi che scelgo io per cercare.

questo è il form che uso per cercare:
HTML:
<form align='center' action='modulo_rimborso2.php?reg=1' method='POST'>
<select style="color: rgb(204, 0, 0);" name="sel">
<option value="id_venditore">Scrivi il codice del cliente a cui appartiene uno o piu' oggetto/i </option>
</select>
<input type='text' name='txt'>
<input type='submit' value='*'>
</form>

Io vorrei visualizzare solo gli oggetti che hanno nel campo "stato" la scrivva "venduto".
Per cui dovrei dire al database: cercami gli oggetti del venditore X ma solo quelli che nel campo "stato" hanno la scritta "venduto".

Mi fuma il cervello solo a esporre il problema...

In più avrei bisogno di sommare tutti i valori del campo "rimborso" e inserire il totale in fondo.

Spero ci sia un anima buona che mi possa far fare un copia e incolla perché ho anche il mio bimbo di un anno e mezzo che mi gira addosso e la concentrazione è pari a zero.....
Grazie per ora.
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ciao
non so forse è troppo semplice
PHP:
$query="SELECT *, sum(rimborso) FROM oggetti 
               WHERE $sel LIKE '%$txt%' &&
                     stato = 'venduto'";
dovrei avere una tabella come la tua con almeno una decina di record


EDIT cosi dovrebbe uscirti un solo record ... mmmm
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
puoi postare l'SQL della tabella ? senza contenuti solo il CREATE TABLE
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
puoi postare l'SQL della tabella ? senza contenuti solo il CREATE TABLE
Intendi i campi della tabella?

id data nome cognome indirizzo telefono email codice_fiscale venduto_a descrizione prezzo quantita percento provvigione rimborso id_venditore venduto data_vendita
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Già se ci aggiungo il "sum(rimborso)" non visualizza più niente.

$query="SELECT * sum(rimborso)
FROM `oggetti`
WHERE `$sel` LIKE CONVERT( _utf8 '$txt'
USING latin1 ) order by venduto desc
";
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
io avevo messo la virgloa dopo l'asterisco

SELECT *,sum(rimborso)

ma cmq non è la soluzione
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Così funziona ma mi mostra solo un record ( l'ultimo che trova) e riporta tale e quale il risultato del campo "rimborso"

SELECT * , SUM( rimborso ) FROM oggetti WHERE id_venditore LIKE CONVERT( _utf8 '$txt' USING latin1 ) && venduto = venduto
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Che tipo di dato è "rimborso"? FLOAT ?
forse ti conviene cmq fare una query semplicissima

Codice:
SELECT * FROM oggetti WHERE id_venditore LIKE '%$txt%' && venduto = 'venduto'
il LIKE ha senso se usi anche le % altrimenti ti basta usare =

e poi calcolarti la somma con php
PHP:
$somma = 0;
while($row = mysql_fetch_assoc($result) {

       $somma += $row['rimborso']

}
 

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 il codice del form è completo o è fatto così come hai postato?
se è fatto così:
trasmette un unico valore (c'è una option unica)
l'eventuale valore trasmesso è id_venditore

cosa serve quindi la select?

poi vedo che usi id_venditore LIKE '%$txt%', usualmente con il termine id si indica un numero intero, che senso ha quindi il like, estrai i venditori
che nell'id contengono (es.) il numero 258 )125833, 258449, 336258...?
generalmente il like si usa per i testi (es) trovo i venditori che il cui nome comincia per "gi" (gianni, giuseppe, giacomo...)
la select di cui prima (sempre secondo me) avrebbe senzo se estraessi da una tabella "venditori" il loro nome e il loro id per poi inviarlo alla query

se ho detto delle pu....te, dimenticate il tutto
poi quando si usa il SUM per una colonna (come count e simili) i record restituiti sono sempre uno, quindi, a parte i discorsi sull'id e like, potresti provare una query del genere

SELECT *, SUM(rimborso) FROM oggetti WHERE id_venditore LIKE '%$txt%' AND venduto = 'venduto' GROUP BY id_venditore
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
ciao
scusate, ma il codice del form è completo o è fatto così come hai postato?
se è fatto così:
trasmette un unico valore (c'è una option unica)
l'eventuale valore trasmesso è id_venditore

cosa serve quindi la select?

poi vedo che usi id_venditore LIKE '%$txt%', usualmente con il termine id si indica un numero intero, che senso ha quindi il like, estrai i venditori
che nell'id contengono (es.) il numero 258 )125833, 258449, 336258...?
generalmente il like si usa per i testi (es) trovo i venditori che il cui nome comincia per "gi" (gianni, giuseppe, giacomo...)
la select di cui prima (sempre secondo me) avrebbe senzo se estraessi da una tabella "venditori" il loro nome e il loro id per poi inviarlo alla query

se ho detto delle pu....te, dimenticate il tutto
poi quando si usa il SUM per una colonna (come count e simili) i record restituiti sono sempre uno, quindi, a parte i discorsi sull'id e like, potresti provare una query del genere

SELECT *, SUM(rimborso) FROM oggetti WHERE id_venditore LIKE '%$txt%' AND venduto = 'venduto' GROUP BY id_venditore

Ciao Borgo.
Hai ragione, il select non ha senso così com'è.... io uso molto il copia e incolla da altre mie pagine per far prima e "adatto" molto.
Il codice per visualizzare solo i campi venduti mi funziona grazie a Criric.
Questo:
SELECT * FROM oggetti WHERE id_venditore LIKE '%$txt%' && venduto = 'venduto'

Ma la somma come hai scritto te:
$somma = 0;
while($row = mysql_fetch_assoc($result) {

$somma += $row['rimborso']

}
Mi da errore sul while!!!
:-(
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Mi da errore sul while!!!
mancava una ) e un ;
PHP:
<?php

$somma = 0;
while ($row = mysql_fetch_assoc($result)) {

    $somma += $row['rimborso'];
}
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
campo vuoto?
cioè se scrivi cosi :
PHP:
 <?php
while ($row = mysql_fetch_assoc($result)) {

   echo $row['rimborso'] . " euro";
}
?>
ti scrive solo euro?
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
incollo quasi tutto...

PHP:
<?php
 $sel = $_POST['sel'];
 $txt = $_POST['txt'];
 $username="XXXXXXXX";
 $password="xxxxxxxxxxxxxx";
 $database="xxxxxxxxxxxxxxx";
 
 $a=time();
 $b=date('d/m/y', $a);
 
 mysql_connect(localhost,$username,$password);
 @mysql_select_db($database) or die("Impossibile selezionare il database.");
 $query="SELECT * FROM oggetti WHERE id_venditore LIKE '%$txt%' && venduto = 'venduto'";
 
 $somma = 0;
 
 $risultati=mysql_query($query);
 
 $num=mysql_numrows($risultati);
 

 mysql_close();

 $i=0;
 while ($i < $num) {
     
     $id=mysql_result($risultati,$i,"id");
     $id_venditore=mysql_result($risultati,$i,"id_venditore");
     $descrizione=mysql_result($risultati,$i,"descrizione");
     $prezzo=mysql_result($risultati,$i,"prezzo");
     $quantita=mysql_result($risultati,$i,"quantita");
     $percento=mysql_result($risultati,$i,"percento");
     $provvigione=mysql_result($risultati,$i,"provvigione");
     $rimborso=mysql_result($risultati,$i,"rimborso");
     $venduto=mysql_result($risultati,$i,"venduto");
 $data_vendita=mysql_result($risultati,$i,"data_vendita");
     
 
 echo "<table align='center' bgcolor='white' border='1' height='' width='900' cellpadding='0' cellspacing='0'>";
 echo "<tr>";
 echo "<td align='center' width=''><b>id oggetto</b></td>";
 echo "<td align='center' width=''><b>id venditore</b></td>";
 echo "<td align='center' width=''><b>Descrizione</b></td>";
 echo "<td align='center' width=''><b>Prezzo</b></td>";
 echo "<td align='center' width=''><b>Quantita'</b></td>";
 echo "<td align='center' width=''><b>%</b></td>";
 echo "<td align='center' width=''><b>Provvigione</b></td>";
 echo "<td align='center' width=''><b>Rimborso</b></td>";
 echo "<td align='center' width=''><b>Stato</b></td>";
 echo "<td align='center' width=''><b>Data vendita</b></td>";
 echo "</tr>";
 echo "<td align='center'width=''>$id</td>";
 echo "<td align='center'width=''>$id_venditore</td>";
 echo "<td align='center'width=''>$descrizione</td>";
 echo "<td align='center' width=''>$prezzo euro</td>";
 echo "<td align='center' width=''>$quantita</td>";
 echo "<td align='center' width=''>$percento %</td>";
 echo "<td align='center' width=''>$provvigione euro</td>";
 echo "<td align='center' width=''>$rimborso euro</td>";
 echo "<td align='center' width=''>$venduto</td>";
 echo "<td align='center'width=''>$data_vendita</td>";
 echo "</table><br>";
 
 
     $i++;
     
 }


 ?>
 

<br>
<table align='center' bgcolor='white' border='0' height='' width='900' cellpadding='0' cellspacing='0'>
<td align='center'><font color='black' size='3'>
Totale oggetti = <?php echo "$num"; ?><br>
Rimborso di oggetti venduti fino al <?php echo $b ?> =  <?php
while ($row = mysql_fetch_assoc($result)) {

   echo $row['rimborso'] . " euro";
}
?></font><br><br>
<font color='black' size='2'><br><a href='javascript:print();'>stampa </a></font></td></table><br>
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
prova una cosa del genere
PHP:
<?php
//$sel = $_POST['sel']; //se non ti serve non metterlo
$txt = $_POST['txt'];
$username="XXXXXXXX";
$password="xxxxxxxxxxxxxx";
$database="xxxxxxxxxxxxxxx";
//$a=time();
//$b=date('d/m/y', $a);
$b=date('d/m/y');//perchè leggi prima con time e poi trasformi?
mysql_connect(localhost,$username,$password);
mysql_select_db($database) or die("Impossibile selezionare il database.");//non mettere i silent @
$query="SELECT * FROM oggetti WHERE id_venditore LIKE '%$txt%' && venduto = 'venduto'";
$risultati=mysql_query($query);
$num=mysql_numrows($risultati);
//mysql_close();non serve e poi qui di sicuro no, ci pensa php a chiudere
//poi perche fai tutto quell'ambaradan con il while
//l'unica dosa a cui ti uò servire $num oltre a vedere quanti sono è verificare che ci siano record
if($num > 0){
	$rimborso = 0;
	//la larghezza delle colonne width basta metterla alla prima riga
	echo <<<TAB
	<table align='center' bgcolor='white' border='1' height='' width='900' cellpadding='0' cellspacing='0'>
	<tr>
	<td align='center' width=''><b>id oggetto</b></td>
	<td align='center' width=''><b>id venditore</b></td>
	<td align='center' width=''><b>Descrizione</b></td>
	<td align='center' width=''><b>Prezzo</b></td>
	<td align='center' width=''><b>Quantit&agrave;</b></td>
	<td align='center' width=''><b>%</b></td>
	<td align='center' width=''><b>Provvigione</b></td>
	<td align='center' width=''><b>Rimborso</b></td>
	<td align='center' width=''><b>Stato</b></td>
	<td align='center' width=''><b>Data vendita</b></td>
	</tr>
TAB;
//attento che TAB sia allineato alla prima colonna e non abbia altro sulla stessa riga (anche per gli altri heredoc)
	while($riga=mysql_fetch_array($risultati)){
		$rimborso +=$riga['rimborso'];
		echo <<< RIS
		<tr><td align='center'>$riga['id']</td>
		<td align='center'>$riga['id_venditore']</td>
		<td align='center'>$riga['descrizione']</td>
		<td align='center'>$riga['prezzo euro'] euro</td>
		<td align='center'>$riga['quantita']</td>
		<td align='center'>$riga['percento'] %</td>
		<td align='center'>$riga['provvigione'] euro</td>
		<td align='center'>$riga['rimborso'] euro</td>
		<td align='center'>$riga['venduto']</td>
		<td align='center'>$riga['data_vendita']</td></tr>
RIS;
}
	echo "</table>";
	//e gli altri risultati -- mancavano i tr
	echo <<< RIA
	<table align='center' bgcolor='white' border='0' height='' width='900' cellpadding='0' cellspacing='0'>
	<tr><td align='center'><font color='black' size='3'>
	Totale oggetti =$num<br>
	Rimborso di oggetti venduti fino al $b = $rimborso euro<br>
	</font><br><br>
	<font color='black' size='2'><br><a href='javascript:print();'>stampa </a></font></td></tr></table><br>
RIA;
}else{
	echo "non ci sono record in base alla ricerca effettuata";
}
?>
 

Trapano

Utente Attivo
27 Set 2012
238
0
16
44
Apprezzo molto i tuoi sforzi e il tempo che mi dedichi. Ma ho copiato tutto il codice e incollato in una pagina nuova. Ho cambiato solo i dati per il login al db ma mi da errore alle righe" echo <<<TAB"
Ho anche allineato i tab....
Magari sono i campi della tabella da modificare? Il tipo?
Io ho messo per Rimborso"float" e tutti gli altri "varchar"
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
credo che le variabili vadano scritte tra graffe
PHP:
echo <<< RIS
        <tr><td align='center'>{$riga['id']}</td>
        <td align='center'>{$riga['id_venditore']}</td>
        <td align='center'>{$riga['descrizione']}</td>
        <td align='center'>{$riga['prezzo euro']} euro</td>
        <td align='center'>{$riga['quantita']}</td>
        <td align='center'>{$riga['percento']} %</td>
        <td align='center'>{$riga['provvigione']} euro</td>
        <td align='center'>{$riga['rimborso']} euro</td>
        <td align='center'>{$riga['venduto']}</td>
        <td align='center'>{$riga['data_vendita']}</td></tr>
 RIS;