Problème de resquette avec like

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de resquette avec like

par Vikchill » 24 août 2007, 15:30

Non, celà me selectionne les dates finissant par 00:20 et 00:40 HORS de mon intervalle de temps voulu :shock:
Excuse-moi, j'avais mal compris:

Code : Tout sélectionner

select* FROM `station` WHERE DATETIME>='$_GET[depart]:00' AND DATETIME<='$_GET[arrivee]:00' AND (DATETIME LIKE '%00:20' OR DATETIME LIKE '%00:40' ) ORDER BY DATETIME LIMIT $_GET[limitedeb], $limite"
Sinon j'ai un petit doute, mais essaie ça aussi, c'est peut-être plus clair comme code

Code : Tout sélectionner

select* FROM `station` WHERE DATETIME BETWEEN '$_GET[depart]:00' AND '$_GET[arrivee]:00' AND (DATETIME LIKE '%00:20' OR DATETIME LIKE '%00:40' ) ORDER BY DATETIME LIMIT $_GET[limitedeb], $limite"
Fais aussi attention au choix des noms de tes colonnes, datetime peut être un mot réservé.

[Edit: owned]

par zeus » 24 août 2007, 15:19

Conseil qui te permettra d'éviter des erreurs inutiles et camouflée :
Sort tes variables des chaines et encadres les indexs de tes tableaux par des quotes
$sql = "SELECT *
		FROM station
		WHERE 
			DATETIME >= '". $_GET['depart'] .":00' 
			AND DATETIME <= '". $_GET['arrivee'] .":00'
			AND (	DATETIME LIKE '%00:20' 
					OR DATETIME LIKE '%00:40' )
		ORDER BY 
			DATETIME LIMIT ". $_GET['limitedeb'] .", ".	$limite;

par aurélien69 » 24 août 2007, 15:13

C'est résolut, voici la solution :

Code : Tout sélectionner

select* FROM `station` WHERE DATETIME>='$_GET[depart]:00' AND DATETIME<='$_GET[arrivee]:00' AND (DATETIME LIKE '%00:20' OR DATETIME LIKE '%00:40' ) ORDER BY DATETIME LIMIT $_GET[limitedeb], $limite"
Suffisais que je mette les parenthèses au bon endroit !

par Aurélien69 » 24 août 2007, 15:05

Non, celà me selectionne les dates finissant par 00:20 et 00:40 HORS de mon intervalle de temps voulu :shock:

Re: Problème de resquette avec like

par Vikchill » 24 août 2007, 14:23

Salut Aurélien,

essaie dans le mesure du possible de soumettre du SQL pur, genre en affichant la requête générée avec un
echo $sql;
Je crois que c'est plus simple.

En tout cas, essaie ça:

Code : Tout sélectionner

select* FROM `station` WHERE (DATETIME>='$_GET[depart]:00' AND DATETIME<='$_GET[arrivee]:00' ) OR DATETIME LIKE '%00:20' OR DATETIME LIKE '%00:40' ORDER BY DATETIME LIMIT $_GET[limitedeb], $limite"

Problème de resquette avec like

par aurélien69 » 24 août 2007, 14:10

Bonjour,

J'ai une base de données sur laquelle je veux effectuer un tri en fonction de la date et l'heure.

Voici la requette que je dois effectuer

-selectionner tous les champs pour lequels DATETIME finit soit par "00:20" soit par "00:40" entre la date $datedepart et la date $datearrivee.

Voici ma requette :

Code : Tout sélectionner

$sql ="select* FROM `station` WHERE DATETIME>='$_GET[depart]:00' AND DATETIME<='$_GET[arrivee]:00' AND DATETIME LIKE '%00:20' AND DATETIME LIKE '%00:40' ORDER BY DATETIME LIMIT $_GET[limitedeb], $limite";


Là ca ne marche pas car comme il comprend que DATETIME doit terminer par 00:20 et 00:40 en même temps ce qui est impossible.

Voici la même chose avec un OR :

Code : Tout sélectionner

$sql ="select* FROM `station` WHERE DATETIME>='$_GET[depart]:00' AND DATETIME<='$_GET[arrivee]:00' AND DATETIME LIKE '%00:20' OR DATETIME LIKE '%00:40' ORDER BY DATETIME LIMIT $_GET[limitedeb], $limite";
Avec ce OR, il me selectionne aussi les données qui sont hors de mon interval $datedepart $datearrivee.

Que faut il faire?