- Home
- Categorie
- Coding e Sistemistica
- PHP
- come sapere i parziali dopo una ricerca?
-
come sapere i parziali dopo una ricerca?
questa è la query di ricerca:
[PHP]
<?
$dal_giorno=$aa1."-".$mm1."-".$gg1;
$al_giorno=$aa2."-".$mm2."-".$gg2;
if ($stato_ordine){
$search_stato_ordine="AND stato_ordine like "".$stato_ordine.""";
}
if ($stato_merce){
$search_stato_merce="AND stato_merce like "".$stato_merce.""";
}
if ($reclamo_si_no){
$search_reclamo_si_no="AND reclamo_si_no like "".$reclamo_si_no.""";
}
if ($dal_giorno!="--" && $al_giorno!="--"){
$search_data_ins_prot_ordini="AND data_ins_prot_ordini >= "".$dal_giorno."" AND data_ins_prot_ordini <= "".$al_giorno.""";
}$query="SELECT * FROM protocollo_ordini WHERE (id_protocolli_ordini>0 ".$search_stato_ordine.$search_stato_merce.$search_reclamo_si_no.$search_data_ins_prot_ordini.$search_note_ordine.$search_merce_mancante.") AND note_ordine like '%$chiave%' AND merce_mancante like '%$chiaveb%' "; $ris_query=mysql_query($query, $conn);
$nr_risultato = mysql_num_rows($ris_query);
?>
[/PHP]e questo è la query che mi dovrebbe dare i risultati parziali della ricerca, il problema è che come risultati mi da sempre 0:
[PHP]
<?php
$result = mysql_query("SELECT stato_ordine FROM protocollo_ordini WHERE id_protocolli_ordini>0 ".$search_stato_ordine." = 'In lavorazione'");
$parz_nr_in_lavorazione = mysql_num_rows($result);
$result = mysql_query("SELECT stato_ordine FROM protocollo_ordini WHERE id_protocolli_ordini>0 ".$search_stato_ordine." = 'In attesa'");
$parz_nr_in_attesa = mysql_num_rows($result);
$result = mysql_query("SELECT stato_ordine FROM protocollo_ordini WHERE id_protocolli_ordini>0 ".$search_stato_ordine." = 'Completato'");
$parz_nr_completato = mysql_num_rows($result);
$parz_totale1 = $parz_nr_in_lavorazione+$parz_nr_in_attesa+$parz_nr_completato;
?>in attesa<?=$parz_nr_in_attesa?><br>
in lavorazione<?=$parz_nr_in_lavorazione?><br>
completato<?=$parz_nr_completato?><br>
[/PHP]
-
Ciao prinzart,
guardando al volo i tuoi script mi sembra che la query contiene una cosa del tipo campo like = 'pippo': se così fosse il simbolo di uguaglianza è un errore (dovresti mettere in tal caso campo like 'pippo').
Per sicurezza prova a farti stampare a monitor le query, così se hanno un errore lo vedi subito.Inoltre fatti stampare l'errore in caso di insuccesso delle query:
mysql_query("SELECT...") or die mysql_errno() . ": " . mysql_error() . "\n";
Facci sapere se e come risolvi!
-
ho messo like invece di = e ora invece di darmi 0 nei parziali mi da il totale di tutti i record del DB
[PHP]
<?php
$result = mysql_query("SELECT * FROM protocollo_ordini WHERE id_protocolli_ordini>0 ".$search_stato_ordine." like 'In lavorazione'");
$parz_nr_in_lavorazione = mysql_num_rows($result);
$result = mysql_query("SELECT * FROM protocollo_ordini WHERE id_protocolli_ordini>0 ".$search_stato_ordine." like 'In attesa'");
$parz_nr_in_attesa = mysql_num_rows($result);
$result = mysql_query("SELECT * FROM protocollo_ordini WHERE id_protocolli_ordini>0 ".$search_stato_ordine." like 'Completato'");
$parz_nr_completato = mysql_num_rows($result);
$parz_totale1 = $parz_nr_in_lavorazione+$parz_nr_in_attesa+$parz_nr_completato;
?>in attesa<?=$parz_nr_in_attesa?><br>
in lavorazione<?=$parz_nr_in_lavorazione?><br>
completato<?=$parz_nr_completato?><br>
[/PHP]
-
Ti sei fatto stampare la query a monitor?
-
mi stampa:
SELECT * FROM protocollo_ordini WHERE (id_protocolli_ordini>0 AND data_ins_prot_ordini >= "2007-12-15" AND data_ins_prot_ordini <= "2007-12-18") AND note_ordine like '%%' AND merce_mancante like '%%'
-
Non so cosa contiene il db, ma le clausole
note_ordine like '%%' AND merce_mancante like '%%'
mi sembrano superflue (anche se non sono loro la causa dei tuoi problemi :D).Sei sicuro che esistano record al di fuori dell'intervallo di date selezionato?
Inotre la query che hai stampato non è nessuna delle tre precedentemente postate, ma è la prima che, se ho ben capito, non ti dava alcun errore... :bho:
-
ora ho fatto così:
[php]
<?php
$query1="SELECT * FROM protocollo_ordini WHERE (id_protocolli_ordini>0 ".$search_stato_ordine." like 'In lavorazione')";
$result1=mysql_query($query1, $conn);
$parz_nr_in_lavorazione = mysql_num_rows($result1);
$result2 = mysql_query("SELECT * FROM protocollo_ordini WHERE id_protocolli_ordini>0 ".$search_stato_ordine." like 'In attesa'");
$parz_nr_in_attesa = mysql_num_rows($result2);
$result3 = mysql_query("SELECT * FROM protocollo_ordini WHERE id_protocolli_ordini>0 ".$search_stato_ordine." like 'Completato'");
$parz_nr_completato = mysql_num_rows($result3);
$parz_totale1 = $parz_nr_in_lavorazione+$parz_nr_in_attesa+$parz_nr_completato;echo "$query1";
?>
[/php]e mi stampa questo:SELECT * FROM protocollo_ordini WHERE (id_protocolli_ordini>0 like 'In lavorazione')
quindi mi prende il totale dei record "in lavorazione" ma per prendere solo quelli del risultato della ricerca come si fa?
-
@prinzart said:
e mi stampa questo:
SELECT * FROM protocollo_ordini WHERE (id_protocolli_ordini>0 like 'In lavorazione')
...mi sembrava questo il tuo fine... comunque la query è ancora sbagliata correggila in:
*** SELECT * FROM protocollo_ordini WHERE id_protocolli_ordini>0 AND stato_merce='In lavorazione'***
Cioè nella tua query manca il campo su cui applichi il like, che a questo punto mi pare non più necessario, pertanto togliamo il like e mettiamo l'uguale (=).@prinzart said:
quindi mi prende il totale dei record "in lavorazione" ma per prendere solo quelli del risultato della ricerca come si fa?
... a questo punto non mi è più chiaro il tuo obiettivo...:bho:
-
Tolgierei inoltre
***id_protocolli_ordini>0
a meno che non abbia particolari esigenze, tipo id negativi o nulli per svariati motivi. Se gli id sono sempre positivi puoi quindi ulteriormente accorciare la query in:
*** SELECT * FROM protocollo_ordini WHERE stato_merce='In lavorazione'
-
CI SONO RIUSCITOOOOO!!!!!!
ecco la pozione magica:
[PHP]
<?php
$result = mysql_query("SELECT * FROM protocollo_ordini WHERE (id_protocolli_ordini>0 ".$search_stato_ordine.$search_data_ins_prot_ordini.") AND stato_ordine like 'In lavorazione' ");
$parz_nr_in_lavorazione = mysql_num_rows($result);
$result = mysql_query("SELECT * FROM protocollo_ordini WHERE (id_protocolli_ordini>0 ".$search_stato_ordine.$search_data_ins_prot_ordini.") AND stato_ordine like 'In attesa' ");
$parz_nr_in_attesa = mysql_num_rows($result);
$result = mysql_query("SELECT * FROM protocollo_ordini WHERE (id_protocolli_ordini>0 ".$search_stato_ordine.$search_data_ins_prot_ordini.") AND stato_ordine like 'Completato' ");
$parz_nr_completato = mysql_num_rows($result);
$parz_totale1 = $parz_nr_in_lavorazione+$parz_nr_in_attesa+$parz_nr_completato;
?>in attesa<?=$parz_nr_in_attesa?><br>
in lavorazione<?=$parz_nr_in_lavorazione?><br>
completato<?=$parz_nr_completato?><br>
[/PHP]