Re Probléme de requêtes !!

Eléphant du PHP | 259 Messages

27 juil. 2007, 12:18

Bonjour,

J'aimerais faire une requête qui recherche des enregistrements suivant un lieu (choisi par l'utilisateur). Mais j'aimerais aussi rechercher les enregistrements suivant la ville ou se situe le lieu. Je récupére la ville correspond au lieu mais pour la requête je ne sais pas comment faire :

Si je fait ça, ça ne marche pas vu que c'est AND :

Code : Tout sélectionner

SELECT DISTINCT(id), nom FROM matable WHERE nom = '$lieu' AND nom = '$ville'");
Il faudrait faire 2 requêtes je pense mais je ne vois pas trop comment...Dans le champ nom de matable, il y a les lieux et les villes pour chaque id.
Par ex id = 1 nom = paris
id = 2 nom = tour effeil
id = 3 nom = Marseille
..etc

Donc si je recherche comme lieu la tour effeil, j'aimerais afficher tous les id ou nom = tour effeil et nom = Paris.
Modifié en dernier par angebleu17 le 27 juil. 2007, 15:27, modifié 1 fois.

Eléphant du PHP | 259 Messages

27 juil. 2007, 13:09

hello,

"nom" peut pas être à la fois "paris" et "tour eiffel", il peut par contre être l'un OU l'autre ;)

Eléphant du PHP | 259 Messages

27 juil. 2007, 13:14

On peut mettre un OR dans une requête ??

Eléphant du PHP | 259 Messages

27 juil. 2007, 13:22

bah essaye, ca explosera pas :)

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 juil. 2007, 14:30

On peut mettre un OR dans une requête ??
:(

http://dev.mysql.com/doc/

Eléphant du PHP | 259 Messages

27 juil. 2007, 15:26

désolée je ne savais pas.. j'y avais pensé en +.. :?

Sinon j'ai un autre petit probléme (enfin cette fois-ci un vrai :wink: )

Je veaux récupérer les enregistrement où la date d'aujourd'hui est entre la date de debut et la date de fin, voici ma requete :

Code : Tout sélectionner

$req = mysql_query("SELECT * FROM matable WHERE Now() BETWEEN date_debut AND date_fin AND date_fin = '$date' ORDER BY date_fin") or die (mysql_error());
Le probléme c'est lorsque date est égal à la date d'aujourd'hui, il ne me retourne pas les enregistrements. Pourtant j'ai vu que le between prend supérieur égal à date début et inférieur égal a date fin !!

J'ai une autre requête pareil mais je compare la date de début, quand la date d'aujourd'hui est égal à la date de début ça l'affiche bien mais si la date de fin est égal à la date d'aujourd'hui ça ne l'affiche pas. Donc le between ne fait pas inférieur ou égal a la date fin mais strictement inférieur !!

Et meme en mettant : now() >= $date_debut AND now() <= $date_fin ça ne marche pas non plus !


Comment faire pour prendre en compte les enregistrements ou date fin est égal a aujourd'hui ?

Mammouth du PHP | 568 Messages

27 juil. 2007, 15:52

Tu utilise des données de quelle type? date ou datetime?

Eléphant du PHP | 259 Messages

27 juil. 2007, 16:00

de type date

Mammouth du PHP | 568 Messages

27 juil. 2007, 16:06

Dans ta requête "WHERE Now() BETWEEN date_debut AND date_fin" ne veux rien dire.

Par contre tu peux essayer avec date_debut>=Now() AND date_fin = '$date'

Eléphant du PHP | 259 Messages

27 juil. 2007, 16:17

oui mais je veux récupérer les enregistrements ou la date d'aujourd'hui est entredate debut et date fin et que date fin soit égal à date.

En mettant ce que tu as dit ça ne marche pas non +..

Mammouth du PHP | 568 Messages

27 juil. 2007, 16:18

Je fais qq test et je post.

Eléphant du PHP | 259 Messages

27 juil. 2007, 16:19

ok :wink:

Mammouth du PHP | 568 Messages

27 juil. 2007, 16:38

ok après qq test je ne vois pas comment tu peux essayer de comparer now() sur d'autres champs sachant que now() sera interprété dans la requête comme "20070727 16:36:40".

Si jamais tu trouve une solution, je veux bien la connaitre.

Eléphant du PHP | 259 Messages

30 juil. 2007, 09:24

en faisant ceci ça marche :
<?
$date_now = date("Y-m-d");

$req = mysql_query("SELECT * FROM matable WHERE '$date_now' BETWEEN date_debut AND date_fin AND date_fin = '$date' ORDER BY date_fin") or die (mysql_error()); 

?>