[MYSQL] pb requete

Voilà ce que j’ai manqué poster, mais j’ai pas osé vu que personne en avait causé ^^ ca marche bien comme le math et les priorités de calcul avec les parenthèses en MySQL donc ^^ :smiley:

Pour les nombres: si ça fait entre 0 et 255, tu prend TINYINT ça économise 3 octets par rapports à un INT (et faut prendre l’option UNSIGNED).

ben avec ou sans parenthse ca fait rien de plus…des que je met du 01/08 au 01/09 il me met les memes reponse que du 01/09 au 01/09…

et pourtant le 31/08 sur le poste 48 il est arrive des choses…

oki sans-nom je modifie ma table en consequence :slight_smile:

Commence par :

SQL
[color=blue;font-weight:bold]SELECT[/color] * FROM ticket WHERE (called=48 AND recordDay=1 AND recordMonth=9) OR (caller=48 AND recordDay=1 AND recordMonth=9)

C’est CALLED et CALLER c ca ?

EDIT: pourquoi tu peux pas avoir des dates correctes ?

avec ta requete ca marche bien
pareil pour le 31/08

en fait le format que je recois de la trame IP ne fourni deja pas l année…

de plus a cause du format tordu de la trame il y a entre le jour et mois des espaces qui sont déja diffcilement gérable et sont variables

enfin le script est comme je disais JAVA, ce n est pas moi qui l ai fait et cette personne a déja été tres sympe de me donner vraiment un énorme coup de main pour ce script (elle a tout fait)
j ai essaye de rajouter l annee (heure systeme) et de concatener les autres données mais je m y suis casse les dents

daonc ca peut et ca sera une evolution du script (qd je serais plus a l aise en java) mais pour l instant je dois faire avec des champs séparé et pas d année

Si t’as des valeurs dans des champs séparés tu peux les regrouper dans un champ unique non ? Je comprends pas bien le soucis, enfin bref passons ^^

Ma requête fonctionne, et bien maintenant rajouter des trucs et regarde quand sa foire :slight_smile:

SQL
[color=blue;font-weight:bold]SELECT[/color] * FROM ticket WHERE (called=48 AND recordDay>=1 AND recordDay <= 10 AND recordMonth=9)
... et ainsi de suite :)

SELECT * 
FROM ticket
WHERE (called = 48 OR caller = 48)
AND (recordDay BETWEEN 1 AND 10)
AND (recordMonth BETWEEN 9 AND 9)

ca simplifie qd meme

et pour ton champ date y a rien de complexe, ca prends 2 secondes
tu rajoute un champ date(ou datetime), j’ai vu que t’avais aussi le temps sans les secondes :slight_smile:

et tu fais :

update ticket  set date=concat(2005,'-',recordMonth,'-',recordDay,' ',recordHour,':',recordMin)

(se peut qu’il existe un equivalent du mktime() de php en MySql)
alors fait pas croire que c’était complexe à trouver

ta requete devient


SELECT * 
FROM ticket
WHERE (called = 48 OR caller = 48)
AND (Dayofmonth(date) BETWEEN 1 AND 10)
AND (month(date) BETWEEN 9 AND 9)

Même si florent est parfois évasif, je crois bien qu’il a du expliquer à trois reprises qu’il ne pouvait pas utiliser de champs DATETIME parce que son programme JAVA était mal fichu et que les trames n’envoyaient pas des DATETIME mais un autre truc.

(même si je pense qu’il peut quand même mettre du DATETIME en rusant)

j’ai vu, mais vu qu’il semblait vouloir savoir comment faire l’ajout d’un datetime facilement, je lui propose la requete :slight_smile:

si je rajoute un datetime je prefererais vivement passer par le prg java pour en faire un correct sur le modele yyyy-mm-dd

par contre ca peut etre une solution en attendant que le programme java puisse le faire tout seul…

sans-nom> qd tu dis en rusant…tu penses a la meme solution que mikmak?

ENFIN !
Tenez pas compte de mon ancienne requete qui marche pas, elle cherchait entre le 1 et 10 du rang des mois spécifiés, c’est pas juste du tout, genre recherche du '1/08/2005 au ‘10/08/2005’,‘1/09/2005’ au ‘10/09/2005’, y manque du monde

par contre, après moulte reflection, ceci fonctionne a merveille :

SELECT * 
FROM ticket
WHERE date_format( CONCAT( 2005, '-', recordMonth, '-', recordDay ) , '%Y-%m-%d' ) >= '2005-09-01'
AND date_format( CONCAT( 2005, '-', recordMonth, '-', recordDay ) , '%Y-%m-%d' ) <= '2005-09-10'
AND (
called =48
OR caller =48
)

Vi. Tu passe au format date, et quand tu récupères tes trames (je sais pas ce que c’est mais passons), tu fais une requête au format date. On t’envoie les dates en morceaux séparés: recolles les!

par contre je le vois mal faire une recherche entre le 1/12/2005 et le 31/01/2006 s’il n’y a pas de notion d’année :-/

oui les trames n ont pas d annee

je saias c inhabituel…et c meme completement idiot

mais comme je disais la prochaine evolution sera de rajouter l annee systeme qd le prg java inserera les enregistrements ds la bdd…

ca devrait ainsi regler le pb:)

en attendant ma requete devrait te convenir :slight_smile:

j ai decide d ajouter les heures en utilisant directement ta requete mikmak

par contre elle poste un pb: elle affiche une enregitrsment quelle devrait trouver!

la voici:


SELECT * FROM ticket WHERE date_format( CONCAT( 2005, '-', recordMonth, '-', recordDay ) , '%Y-%m-%d' ) >= '$date_deb' AND date_format( CONCAT( 2005, '-', recordMonth, '-', recordDay ) , '%Y-%m-%d' ) <= '$date_fin' AND date_format( CONCAT( recordHour, '-', recordMin ) , '%k-%i' ) >= '$heure_deb' AND date_format( CONCAT( recordHour, '-', recordMin ) , '%k-%i' ) <= '$heure_fin' AND (called ='$poste' OR caller ='$poste')

en effet,
ca te retourne une valeur nulle,
mais ca ca passe :
date_format( CONCAT('0000-00-00 ', recordHour, ‘:’, recordMin) , ‘%k:%i’ )

en lancant cette requete complete ca me fait rien non plus :

SELECT * FROM ticket WHERE date_format( CONCAT( 2005, ‘-’, recordMonth, ‘-’, recordDay ) , ‘%Y-%m-%d’ ) >= ‘2005-08-24’ AND date_format( CONCAT( 2005, ‘-’, recordMonth, ‘-’, recordDay ) , ‘%Y-%m-%d’ ) <= ‘2005-08-26’ AND date_format( CONCAT('0000-00-00 ', recordHour, ‘:’, recordMin) , ‘%k:%i’ ) >= ‘19:14’ AND date_format( CONCAT('0000-00-00 ', recordHour, ‘:’, recordMin) , ‘%k:%i’ ) <= ‘07:09’ AND (called =‘48’ OR caller =‘48’)

surtout que je comprends pas pk ca ne marche pas, d’après la doc c bon