Problema SQL

Per resoldre dubtes de caire tècnic, relacionades o no amb el món del ripeig.

Moderadors: Petiso, Ayu

Avatar de l’usuari

Autor del tema
Dende
Entrades: 261
Membre des de: dl. abr. 30, 2007 16:46
Status: Desconnectat

Problema SQL

#1

Entrada Autor: Dende » dt. set. 08, 2009 14:11

Hola!

Estic intentant crear un servei de windows que m'actualitzi unes dades d'una base de dades amb visual basic, però tinc problemes amb aquesta consulta SQL:

Codi: Selecciona’ls tots

SELECT        MAX(temp), hora
FROM            resum_dia
WHERE        (dia = '1/17/2009')
No entenc quin és el problema de la consulta, ja que n'he utilitzat de semblants moltes vegades i no sé perquè ara falla, tot el que dóna són valors NULL. A veure si em podeu ajudar.

Gràcies!


Imatge

Avatar de l’usuari

Petiso
Site Admin
Site Admin
Entrades: 16309
Membre des de: dv. oct. 06, 2006 13:13
Status: Desconnectat

Re: Problema SQL

#2

Entrada Autor: Petiso » dt. set. 08, 2009 14:59

El problema, es que fas un SQL incorrecte !

No pots fer un MAX() amb una comanda al costat i sense un grup by.

Que vols saber, la temperatura màxima del dia i a quina hora ha estat ? O vols saber la temperatura màxima de cada hora ?

Adéu !
Imatge Imatge

Avatar de l’usuari

Autor del tema
Dende
Entrades: 261
Membre des de: dl. abr. 30, 2007 16:46
Status: Desconnectat

Re: Problema SQL

#3

Entrada Autor: Dende » dt. set. 08, 2009 15:38

La temperatura màxima del dia i a quina hora. I de la mateixa manera hauré de fer el mateix amb humitat, etc..

Gràcies Petiso.
Imatge

Avatar de l’usuari

Petiso
Site Admin
Site Admin
Entrades: 16309
Membre des de: dv. oct. 06, 2006 13:13
Status: Desconnectat

Re: Problema SQL

#4

Entrada Autor: Petiso » dt. set. 08, 2009 15:58

Aleshores, jo ho faria de la següent manera: primer de tot agafaria la temp màxiam del dia, i despres consultaria quines hores (per que poden ser varies) ha estat.

Codi: Selecciona’ls tots

SELECT        MAX(temp) FROM            resum_dia  WHERE        (dia = '1/17/2009')
Això ho guardes a una variable (per exemple max_temp) i després:

Codi: Selecciona’ls tots

SELECT       hora    FROM            resum_dia  WHERE        (dia = '1/17/2009') AND temp = max_temp
Segurament es pot fer amb un sol SELECT fent un join i així ..... però weno, es complicar-se la vida :-p

Adéu !
Imatge Imatge

Avatar de l’usuari

Autor del tema
Dende
Entrades: 261
Membre des de: dl. abr. 30, 2007 16:46
Status: Desconnectat

Re: Problema SQL

#5

Entrada Autor: Dende » dt. set. 08, 2009 16:34

Moltes gràcies Petiso, ara almenys sembla q agafa bé les dades. Ja us diré aviam si funciona bé finalment o no.
Imatge

Avatar de l’usuari

Petiso
Site Admin
Site Admin
Entrades: 16309
Membre des de: dv. oct. 06, 2006 13:13
Status: Desconnectat

Re: Problema SQL

#6

Entrada Autor: Petiso » dt. set. 08, 2009 16:38

De res .... ja te passaré la factura :-p
Imatge Imatge

Avatar de l’usuari

Autor del tema
Dende
Entrades: 261
Membre des de: dl. abr. 30, 2007 16:46
Status: Desconnectat

Re: Problema SQL

#7

Entrada Autor: Dende » dj. set. 10, 2009 14:26

Hola!

Ara em surt un error en el PHPMyAdmin. Vaig amb el wampserver 2.0 i no sé a què es deu aquest error.
Busco tal com diu el fitxer log del php però ni existeix, no hi ha res. Si no és possible solucionar-ho m'agradaria saber quins fitxers haig de guardar per tal de restaurar l'estructura d'una taula de la BD.

L'error és:
Imatge

Gràcies

PD: JA VA. S'HA ARREGLAT APARENTMENT SOL :mrgreen:
Imatge

Avatar de l’usuari

Autor del tema
Dende
Entrades: 261
Membre des de: dl. abr. 30, 2007 16:46
Status: Desconnectat

Re: Problema SQL

#8

Entrada Autor: Dende » dc. set. 30, 2009 16:44

Hola de nou!

Tinc un altre dubte:

Jo tinc una taula en una BD amb aquests camps entre d'altres: 'dia' i 'hora'.
M'agradaria fer una consulta on introduint-li un dia d'inici, un dia de final, una hora d'inici i una hora de final, em mostri les dades compreses entre aquests paràmetres.

He intentat la següent consulta:

Codi: Selecciona’ls tots

SELECT * FROM taula WHERE ((dia BETWEEN $diainici AND $diafinal) AND (hora BETWEEN $horainici AND $horafinal))
El problema és que només em selecciona les dades que van de l'hora inicial a la final de cada dia comprès entre diainici i diafinal.

No sé si m'he explicat gaire però suposo que poc o molt alguna cosa heu entès.

Gràcies.
Imatge

Avatar de l’usuari

arakelov
Entrades: 10759
Membre des de: ds. feb. 17, 2007 16:37
Ubicació: Sant Martí (BCN)
Status: Desconnectat

Re: Problema SQL

#9

Entrada Autor: arakelov » dc. set. 30, 2009 16:54

Has de convertir dies i hores a format data, és a dir, construir un datainici="diainici+horainici" i un datafi="diafi+horafi" (ho poso entre cometes perquè hauràs de buscar quina és la funció per fer aquestes conversions i sumes).

Llavors la clàusula WHERE serà "dia+hora" BETWEEN datainici AND datafi (fent el mateix amb les columnes dia i hora).

Jo també espero haver estat entenedor :P

Salut!
Why you think the net was born? Porn! Porn! Porn!

Avatar de l’usuari

Petiso
Site Admin
Site Admin
Entrades: 16309
Membre des de: dv. oct. 06, 2006 13:13
Status: Desconnectat

Re: Problema SQL

#10

Entrada Autor: Petiso » dc. set. 30, 2009 17:11

Exacte, la solucio es tindre el dia i l'hora en un camp .... que el SQL ja al te: DATETIME

Aleshores només te caldrà fer:
SELECT * FROM taula WHERE data > data_inici AND data < data_final

data te format:
2009-09-30 12:45:05
Imatge Imatge

Avatar de l’usuari

Autor del tema
Dende
Entrades: 261
Membre des de: dl. abr. 30, 2007 16:46
Status: Desconnectat

Re: Problema SQL

#11

Entrada Autor: Dende » dc. set. 30, 2009 19:40

Mm... és a dir fer un camp més a l'estructura de la taula.. no hi ha cap altra alternativa?

Gràcies.
Imatge

Avatar de l’usuari

Petiso
Site Admin
Site Admin
Entrades: 16309
Membre des de: dv. oct. 06, 2006 13:13
Status: Desconnectat

Re: Problema SQL

#12

Entrada Autor: Petiso » dc. set. 30, 2009 20:03

No, no es fer un cap mes ...... es fer un camp dels DOS que tens .... es mes optim !
O sigui .... els camps Dia i hora ->>>>> data

L'altre opció es (no provat)

SELECT * FROM taula WHERE DATE_ADD($dia,INTERVAL $hora HOUR_SECOND) > '$dia_inici $hora_inici AND DATE_ADD($dia,INTERVAL $hora HOUR_SECOND) < '$dia_final $hora_final'

Segueixo pensant ...... que lo mes optim es el primer .... a mes es com es treballa sempre amb SQL .... amb datetime !!

Adéu !
Imatge Imatge

Avatar de l’usuari

Autor del tema
Dende
Entrades: 261
Membre des de: dl. abr. 30, 2007 16:46
Status: Desconnectat

Re: Problema SQL

#13

Entrada Autor: Dende » dj. oct. 01, 2009 7:06

Ja però per altres consultes que faig a la BD necessito tenir-los separats, sinó portaria molta més feina.

Doncs afegiré aquest nou camp si no hi ha més remei. Vinga gràcies!
Imatge

Avatar de l’usuari

arakelov
Entrades: 10759
Membre des de: ds. feb. 17, 2007 16:37
Ubicació: Sant Martí (BCN)
Status: Desconnectat

Re: Problema SQL

#14

Entrada Autor: arakelov » dj. oct. 01, 2009 8:17

Dende ha escrit:Doncs afegiré aquest nou camp si no hi ha més remei. Vinga gràcies!
No has d'afegir cap camp, has de calcular-lo durant la consulta!!
Why you think the net was born? Porn! Porn! Porn!

Avatar de l’usuari

Petiso
Site Admin
Site Admin
Entrades: 16309
Membre des de: dv. oct. 06, 2006 13:13
Status: Desconnectat

Re: Problema SQL

#15

Entrada Autor: Petiso » dj. oct. 01, 2009 10:19

el MYSQL ja esta preparat per aixo :-p

El dia que noves vulgis la data fas: DATE(camp sql en format datetime) i te torna la data :-)

Passat per aquí, tens les funcions que pugis necessitar explcaides:
http://dev.mysql.com/doc/refman/5.1/en/ ... tions.html

En resum .... en SQL es treballa casi semrpe en datetime, i si necessites al data, s'extrau al moment amb funciona pròpies del mysql.

Adéu !
Imatge Imatge

Respon