Probleme de requete

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 : Probleme de requete

par djtec » 30 avr. 2007, 14:18

Je te remercie beaucoup sadeq pour ton aide

Sujet réglé

par sadeq » 30 avr. 2007, 14:01

Exact =D>

par djtec » 30 avr. 2007, 13:26

Donc je dois faire ceci alors
$sql = "SELECT DISTINCT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM `".$prefixe."_articles` WHERE id='".$categorie."' AND `titre` REGEXP '^[".$letter."]' AND valide!='non'"; 

par sadeq » 30 avr. 2007, 13:20

Non tu as une erreur de syntaxe, LIKE et REGEXP sont 2 conditions distinctes.
Mais tu peux te passer de LIKE quand tu utilise REGEXP car ce dernier peut faire ce que fait LIKE.

Pour confondre les [0-9] et les lettres, tu utilises le même parametre.

Un indice:
% dans LIKE est équivalent dans REGEXP à .*

par djtec » 30 avr. 2007, 13:04

Donc je dois faire comme ça


mes liens

Code : Tout sélectionner

<a href="tri.php?categorie='.$categorie.'&reg=0-9">0-9</a> <a href="tri.php?categorie='.$categorie.'&letter=A">A</a>
je recupere les données
$categorie = $_GET['categorie'];
$letter = $_GET["letter"];
$reg = $_GET["reg"];
ma requete sql
$sql = "SELECT DISTINCT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM `".$prefixe."_articles` WHERE id='".$categorie."' AND `titre` REGEXP '^[".$reg."]' LIKE '".addslashes($letter)."%' AND valide!='non'";
Car normalement s'il detect le regxep et pas le letter il fonctionnera

par sadeq » 30 avr. 2007, 12:19

Oui je comprends, à ce moment là, ce n'est plus LIKE mais une expression régulière qu'il te faut car quand tu ne connais pas le critère exact de recherche il te faut pencher vers l'usage des expressions régulières.
En SQL on utilise REGEXP dans le WHERE pour évaluer une expression réguliaire.


Exemple:

Code : Tout sélectionner

SELECT * FROM ma_table WHERE champ REGEXP '[0-9]'
Cherche les enregistrements où "champ" contient un numérique (intervalle [0-9]) n'importe où.

Avec la variante

Code : Tout sélectionner

WHERE champ REGEXP '^[0-9]'
La recherche se limite aux valeurs commençant (^) par un numérique

La variante:

Code : Tout sélectionner

WHERE champ REGEXP '[0-9]$'
La recherche se limite aux valeurs se terminant ($) par un numérique

Pour les alphabétiques les intervalles sont [a-z] ou [A..Z]
L'assemblage est possible : [0-9a-zA-Z] c'est le tout

Voir le fonctionnement des REGEXP pour plus d'infos.

par djtec » 30 avr. 2007, 11:51

Si un titre commence par 100 un autre par 220 etc... comment faire pour qu'il se retrouve tous dans la meme page quand quand on fait une recherche de 0-9 au lieu des lettres

Exemple:
si je clique sur le lien suivant

Code : Tout sélectionner

tri.php?categorie=1&letter=0-9
Je voudrais que dans la page tri cela m'affiche tout les titres commencant par un chiffre

par sadeq » 30 avr. 2007, 11:37

Yes ca y ai je commence a comprendre en faites c'est pas si complique que ça

Et pour rechercher tout les resultat de 0 a 9 comment on fait la car la je vois pas du tout
Explique !

par Sékiltoyai » 30 avr. 2007, 11:31

par djtec » 30 avr. 2007, 11:26

Yes ca y ai je commence a comprendre en faites c'est pas si complique que ça

Et pour rechercher tout les resultat de 0 a 9 comment on fait la car la je vois pas du tout

par sadeq » 30 avr. 2007, 11:17

tout à fait, 10/10 8-)

par djtec » 30 avr. 2007, 11:11

Et si je veux afficher les resultat commencant par L mais que de la categorie 1 en ignorant les autres categories je dois mettre

En lien

Code : Tout sélectionner

<a href="tri.php?categorie='.$categorie.'&letter=A">A</a>
'.$categorie.' correspond a l'id de la categorie

Dans la page tri.php

on recupere les donnee
$letter = $_GET["letter"];
$categorie = $_GET['categorie'];
La requete sql
$sql = "SELECT DISTINCT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM `".$prefixe."_articles` WHERE id='".$categorie."' AND `titre` LIKE '".addslashes($letter)."%' AND valide!='non'";

Est-ce bon ou j'ai fait une erreur

par sadeq » 30 avr. 2007, 11:02

Il faut passer le parametre "letter" dans le HREF du lien à la suite d'un "?"
Cette méthode de transmission est appellée "GET", tu dois donc le récupérer sous PHP par la variable $_GET["letter"]

Code : Tout sélectionner

<a href="tri.php?letter=A">A</a>
et en php:
$letter = $_GET["letter"];
....

par djtec » 30 avr. 2007, 10:24

juste une question si je met pas les choix dans un select mais en lien

comme ceci
<a href="tri.php">A</a>

que doit faire dans mon lien pour que la page tri.php reconnaisse que je veux les résultats commencant par A

par djtec » 30 avr. 2007, 10:20

ça marche nikel merci

moi j'avais essayé

Code : Tout sélectionner

$sql = "SELECT DISTINCT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM `".$prefixe."_articles` WHERE `titre` LIKE CONVERT(_utf8 '%".addslashes($letter)."%' USING latin1) COLLATE latin1_general_ci AND valide!='non'";
et cela m'était tout les titre contenant la lettre désiré

merci