Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Confronto records

  1. #1
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400

    Confronto records

    Ciao, vi spiego il problema.

    In una tabella di mysql vengono periodicamente inseriti i risultati di alcune analisi eseguite su campioni di acqua, creando così uno storico dei prelievi.

    Ad ogni inserimento il sistema associa al record corrispondente un risultato che può essere positivo o negativo o neutro.

    Questo risultato può cambiare (speriamo in meglio...) nel tempo e passare da negativo a positivo... adesso dovrei estrarre tramite ASP e mysql tutte quelle analisi con l'ultimo risultato positivo ma che hanno presentato esito negativo nella penultima analisi, come in questo esempio:

    codice:
    IDPRELIEVO	DATAPRELIEVO	STATOPRELIEVO
    23563		2010-06-11	NEGATIVO
    25963		2010-07-18	POSITIVO
    Mi sto scervellando ma non ne vengo a capo... un suggerimento come fare ?
    Grazie mille-

  2. #2
    Ciao,

    premesso che non sono proprio un "mostro" nelle query complicate, credo che puoi risolvere così:
    innanzitutto come fai a sapere che IDPRELIEVO = 23563 (NEGATIVO) è riferito a IDPRELIEVO = 25963(POSITIVO) senza avere un nome del prelievo (o un suo identificativo univoco)?

    Per capirci:
    codice:
    IDPRELIEVO	DATAPRELIEVO	STATOPRELIEVO	NOMEPRELIEVO
    23563		2010-06-11	NEGATIVO		LAGODICOMO
    23564		2010-06-12	NEGATIVO		LAGODILECCO
    25963		2010-07-18	POSITIVO		LAGODICOMO
    25969		2010-07-19	POSITIVO		LAGODILECCO
    Per trovare poi le variazioni da NEGATIVO a POSITIVO farei una query del genere:
    codice:
    SQL = " SELECT * FROM nome_tabella ORDER BY NOMEPRELIEVO ASC, IDPRELIEVO DESC "
    Set RS = Conn.Execute(SQL)
    in questo modo avrai un ordinamento del genere:
    codice:
    IDPRELIEVO	DATAPRELIEVO	STATOPRELIEVO	NOMEPRELIEVO
    25963		2010-07-18	POSITIVO		LAGODICOMO
    23563		2010-06-11	NEGATIVO		LAGODICOMO
    25969		2010-07-19	POSITIVO		LAGODILECCO
    23564		2010-06-12	NEGATIVO		LAGODILECCO
    e in un ciclo "Do While..." controlli record per record la variazione:
    codice:
    Do While Not RS.Eof
    	' verifico se il record precedente ha lo stesso NOMEPRELIEVO del record attuale
    	If VarNOMEPRELIEVO = RS("NOMEPRELIEVO") Then
    		' verifico se il record precedente è POSITIVO ed il record attuale è NEGATIVO
    		If VarSTATOPRELIEVO = "POSITIVO" AND RS("STATOPRELIEVO") = "NEGATIVO" Then
    			' stampo a video i valori
    			Response.Write("Variazione da NEGATIVO a POSITIVO per NOMEPRELIEVO: "& VarNOMEPRELIEVO &", DATAPRELIEVO NEGATIVO: "& RS("DATAPRELIEVO") &", DATAPRELIEVO POSITIVO: "& VarDATAPRELIEVO &"
    ")
    			' svuoto le variabili, esco dai due If e recupero il prossimo record
    			VarIDPRELIEVO		= ""
    			VarDATAPRELIEVO		= ""
    			VarSTATOPRELIEVO	= ""
    			VarNOMEPRELIEVO		= ""
    		End If	'	If VarSTATOPRELIEVO = "POSITIVO" AND RS("STATOPRELIEVO") = "NEGATIVO" Then
    	Else	
    		' il record precedente NON ha lo stesso NOMEPRELIEVO del record attuale
    		' quindi recupero i valori dei nuovi campi solo se STATOPRELIEVO è POSITIVO nel record attuale
    		If RS("STATOPRELIEVO") = "POSITIVO" Then
    			VarIDPRELIEVO		= RS("IDPRELIEVO")
    			VarDATAPRELIEVO		= RS("DATAPRELIEVO")
    			VarSTATOPRELIEVO	= RS("STATOPRELIEVO")
    			VarNOMEPRELIEVO		= RS("NOMEPRELIEVO")
    		Else	' se nel record attuale STATOPRELIEVO NON è POSITIVO svuoto le variabili dai valori del precedente record 
    			VarIDPRELIEVO		= ""
    			VarDATAPRELIEVO		= ""
    			VarSTATOPRELIEVO	= ""
    			VarNOMEPRELIEVO		= ""
    		End If	'	If RS("STATOPRELIEVO") = "POSITIVO" Then
    	End If	'	If VarNOMEPRELIEVO = RS("NOMEPRELIEVO") Then
      RS.MoveNext
    Loop
    con qualche ritocchino dovrebbe funzionare.

    fulvio

  3. #3
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Grazie per il suggerimento.

    In effetti nel copia/incolla della tabella non ho riportato il nome univoco (per me è un codice ma va bene lo stesso) della località dove si esegue l'analisi

    Ho provato il tuo script non dà errori ma non estrae nulla... ma quegli if decommentati devono stare così?
    codice:
    Do While Not RS.Eof
    	' verifico se il record precedente ha lo stesso NOMEPRELIEVO del record attuale
    	If VarNOMEPRELIEVO = RS("NOMEPRELIEVO") Then
    		' verifico se il record precedente è POSITIVO ed il record attuale è NEGATIVO
    		If VarSTATOPRELIEVO = "POSITIVO" AND RS("STATOPRELIEVO") = "NEGATIVO" Then
    			' stampo a video i valori
    			Response.Write("Variazione da NEGATIVO a POSITIVO per NOMEPRELIEVO: "& VarNOMEPRELIEVO &", DATAPRELIEVO NEGATIVO: "& RS("DATAPRELIEVO") &", DATAPRELIEVO POSITIVO: "& VarDATAPRELIEVO &"
    ")
    			' svuoto le variabili, esco dai due If e recupero il prossimo record
    			VarIDPRELIEVO		= ""
    			VarDATAPRELIEVO		= ""
    			VarSTATOPRELIEVO	= ""
    			VarNOMEPRELIEVO		= ""
    		End If	'	If VarSTATOPRELIEVO = "POSITIVO" AND RS("STATOPRELIEVO") = "NEGATIVO" Then
    	Else	
    		' il record precedente NON ha lo stesso NOMEPRELIEVO del record attuale
    		' quindi recupero i valori dei nuovi campi solo se STATOPRELIEVO è POSITIVO nel record attuale
    		If RS("STATOPRELIEVO") = "POSITIVO" Then
    			VarIDPRELIEVO		= RS("IDPRELIEVO")
    			VarDATAPRELIEVO		= RS("DATAPRELIEVO")
    			VarSTATOPRELIEVO	= RS("STATOPRELIEVO")
    			VarNOMEPRELIEVO		= RS("NOMEPRELIEVO")
    		Else	' se nel record attuale STATOPRELIEVO NON è POSITIVO svuoto le variabili dai valori del precedente record 
    			VarIDPRELIEVO		= ""
    			VarDATAPRELIEVO		= ""
    			VarSTATOPRELIEVO	= ""
    			VarNOMEPRELIEVO		= ""
    		End If	'	If RS("STATOPRELIEVO") = "POSITIVO" Then
    	End If	'	If VarNOMEPRELIEVO = RS("NOMEPRELIEVO") Then
      RS.MoveNext
    Loop

  4. #4
    Ciao, la parte dopo gli End If la metto solo per non perdermi si può togliere tranquillamente, però è strano che non dia risultati, prova a mettere un Response.Write(RS("IDPRELIEVO") & "
    ") subito dopo Do While Not RS.Eof in modo da vedere che ordinamento fa la query.

    fulvio

  5. #5
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Originariamente inviato da fulviolo58
    Ciao, la parte dopo gli End If la metto solo per non perdermi si può togliere tranquillamente, però è strano che non dia risultati, prova a mettere un Response.Write(RS("IDPRELIEVO") & "
    ") subito dopo Do While Not RS.Eof in modo da vedere che ordinamento fa la query.

    fulvio
    Ecco:

    codice:
    SELECT * FROM _tbl_test WHERE 1 ORDER BY NOMEPRELIEVO ASC, IDPRELIEVO DESC 
    
    25963---LAGODICOMO
    23563---LAGODICOMO
    25969---LAGODILECCO
    23564---LAGODILECCO

  6. #6
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Allora ho fatto un reset ed adesso sembra funzionare... dico sembra perchè credo che faccia differenza tra maiuscolo e minuscolo, cioè quando è così :

    codice:
    If VarSTATOPRELIEVO = "POSITIVO" AND RS("STATOPRELIEVO") = "NEGATIVO" Then
    Non mi prende in considerazione "Positivo" e "Negativo" è mai possibile?

  7. #7
    Originariamente inviato da wegawhite
    Non mi prende in considerazione "Positivo" e "Negativo" è mai possibile?
    si, mysql è case sensitive, prova ad usare la collation "utf8_general_ci" o "latin1_swedish_ci" che è case insensitive.

    L'ideale credo sarebbe convertire il campo STATOPRELIEVO in numerico smallint in modo da dare -1 per negativo, 0 per neutro e 1 per positivo, occupi meno spazio e velocizzi le query.

    fulvio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.