Strano problema con query

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Strano problema con query

Messaggio da darkstaring »

Giorno a tutti :)
Ho un problema con una query..
Il problema è stano perchè prima di eseguire la query la faccio stampare a video e se la eseguo manualmente da mysql funziona mentre se la eseguo con php mi dà questo errore:

Codice: Seleziona tutto

Errore in queryagg
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
' at line 1
Questo è il codice

Codice: Seleziona tutto

   print "Trovo i dipendenti che hanno fatto più aggiunstamenti e più errori";
   $query="select id-1 AS DIP_PREC,id AS DIP_AGG, dataora , id_dipendente  , id_trattamento from appuntamenti where  (id_trattamento ='A2') OR (id_trattamento='A3');";
   print $query."<BR><BR>";
   $query=mysql_query($query);
   if($query==FALSE) print "ERRORE";
   else
   {
      for($i=0;$i<mysql_num_rows($query);$i++)
      {
	$dip_pre=mysql_result($query,$i,'DIP_PREC');
	$dip_agg=mysql_result($query,$i,'DIP_AGG');
	if(isset($pre)) $pre= $pre.'OR (appuntamenti.id="'.$dip_pre.'")';
	else $pre='(appuntamenti.id="'.$dip_pre.'")';
	
	if(isset($agg)) $agg= $agg."OR (appuntamenti.id='".$dip_agg."')";
	else $agg="(appuntamenti.id='".$dip_agg."')";
      }
      $queryagg="select count(*)AS TOT,dipendenti.nome from appuntamenti, dipendenti where (id_dipendente=dipendenti.id) AND ( $agg ) group by dipendenti.nome;<BR>";
      $querypre="select count(*)AS TOT,dipendenti.nome from appuntamenti, dipendenti where (id_dipendente=dipendenti.id) AND ( $pre ) group by dipendenti.nome; <BR>";
      print "<br>AGGIUNSTA: \t $queryagg<br>SBAGLIANO: \t $querypre<br>";
      $queryagg=mysql_query($queryagg);
      $querypre=mysql_query($querypre);
      if($queryagg == FALSE) print "<br>Errore in queryagg<br>".mysql_error();
      else
      {
      print "Conteggio dei dipendenti che hanno riparato:<TABLE>";
      print "<TH>DIPENDENTE</TH><TH>TOTALE</TH>";
	for($i=0;$i<mysql_num_rows($queryagg);$i++)
	{
	  $conteggio=mysql_result($queryagg,$i,'TOT');
	  $nome=mysql_result($queryagg,$i,'nome');
	  print "<TR><TD>$nome</TD><TD>$conteggio</TD></TR>";
	}
	print "</TABLE>";
	}
	
     if($querypre == FALSE) print "<br>Errore in querypre<br>".mysql_error();
      else
      {
      print "Conteggio dei dipendenti che hanno sbagliato:<TABLE>";
      print "<TH>DIPENDENTE</TH><TH>TOTALE</TH>";
	for($i=0;$i<mysql_num_rows($querypre);$i++)
	{
	  $conteggio=mysql_result($querypre,$i,'TOT');
	  $nome=mysql_result($querypre,$i,'nome');
	  print "<TR><TD>$nome</TD><TD>$conteggio</TD></TR>";
	}
	print "</TABLE>";
	}
	}
Sono diverse le query, prima cerco quello dove devo cercare, e poi faccio un'altra query che conta su quello che ho trovato...

Questo è la query che mi stampa a video

Codice: Seleziona tutto

select count(*)AS TOT,dipendenti.nome from appuntamenti, dipendenti where (id_dipendente=dipendenti.id) AND ( (appuntamenti.id="200876")OR (appuntamenti.id="200877")OR (appuntamenti.id="201254")OR (appuntamenti.id="201255")OR (appuntamenti.id="201884")OR (appuntamenti.id="201888")OR (appuntamenti.id="201900")OR (appuntamenti.id="201905")OR (appuntamenti.id="202130")OR (appuntamenti.id="202342")OR (appuntamenti.id="202639")OR (appuntamenti.id="202980")OR (appuntamenti.id="203253")OR (appuntamenti.id="205453")OR (appuntamenti.id="205465")OR (appuntamenti.id="205877")OR (appuntamenti.id="206097")OR (appuntamenti.id="206338")OR (appuntamenti.id="207138")OR (appuntamenti.id="207678")OR (appuntamenti.id="207682")OR (appuntamenti.id="208651")OR (appuntamenti.id="208689")OR (appuntamenti.id="208690")OR (appuntamenti.id="208740")OR (appuntamenti.id="208997")OR (appuntamenti.id="208998")OR (appuntamenti.id="210075")OR (appuntamenti.id="200744") ) group by dipendenti.nome;
Se la eseguo da mysql funge....

Sapete dirmi perchè e/o come risolvere???

Grazie

Avatar utente
teox99
Linux 3.x
Linux 3.x
Messaggi: 738
Iscritto il: ven 25 lug 2008, 14:54
Slackware: 13.37
Desktop: KDE - Xfce
Località: Roma[Eur]
Contatta:

Re: Strano problema con query

Messaggio da teox99 »

Codice: Seleziona tutto

   if(isset($pre)) $pre= $pre.'OR (appuntamenti.id="'.$dip_pre.'")';
   else $pre='(appuntamenti.id="'.$dip_pre.'")';
   
   if(isset($agg)) $agg= $agg."OR (appuntamenti.id='".$dip_agg."')";
   else $agg="(appuntamenti.id='".$dip_agg."')";
penso che sia un semplice problema di apici, essendo appuntamenti.id numerico
puoi sostituire così

Codice: Seleziona tutto

   if(isset($pre)) $pre = $pre." OR (appuntamenti.id=$dip_pre)";
   else $pre="(appuntamenti.id=$dip_pre)";
   
   if(isset($agg)) $agg = $agg." OR (appuntamenti.id=$dip_agg)";
   else $agg="(appuntamenti.id=$dip_agg)";

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Strano problema con query

Messaggio da darkstaring »

Avevo già provato ma niente...
Mi ritorna sempre lo stesso errore nonostante se eseguo la query da mysql funzioni
Strano :(

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Strano problema con query

Messaggio da ZeroUno »

mi sa che ti genera qualche a capo di troppo.

invece di print usa:

Codice: Seleziona tutto

echo "<pre>============\n";var_dump($query);echo "============</pre>";

edit:

Codice: Seleziona tutto

      $queryagg="select count(*)AS TOT,dipendenti.nome from appuntamenti, dipendenti where (id_dipendente=dipendenti.id) AND ( $agg ) group by dipendenti.nome;<BR>";
che ci fa quel br alla fine?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Strano problema con query

Messaggio da darkstaring »

Ho provato a togliere quei BR che non ci facevano nulla e tutto và bene :D
ahahahahah....

Grazieeeeeee :D

Ma a che serve:

Codice: Seleziona tutto

echo "<pre>============\n";var_dump($query);echo "============</pre>";
???

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Strano problema con query

Messaggio da ZeroUno »

darkstaring ha scritto:Ma a che serve:

Codice: Seleziona tutto

echo "<pre>============\n";var_dump($query);echo "============</pre>";
???
prova ;)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Rispondi