Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
911 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] coup de main pour une requête

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] coup de main pour une requête

n°1514613
Fused
Posté le 14-02-2007 à 16:05:02  profilanswer
 

Hello! Un bon casse tête! Pour moi du moins...
 
J'ai une table qui contient un 2 colonnes
- un numéro unique
- 3 lettres
 
Tout ceci dans l'ordre alphabétique
 par exemple:
(6, 'afu');
(7, 'aga');
(8, 'ago');
(9, 'aib');
(10, 'aid');
 
but: quelqu'un rentre 3 lettres et on retourne la ligne la plus proche ou celle en question si elle existe
 
J'ai réussi à faire ça:
SELECT numéro, lettres
FROM qqchose
WHERE lettres > lettresdonnées;
 
Puis après je décrémente un coup la ligne. Mais si les 3 lettres y sont plusieurs fois d'affilé, il faut que j'ai la première ligne...
 
Merci aux pro du sql :)

mood
Publicité
Posté le 14-02-2007 à 16:05:02  profilanswer
 

n°1514623
MagicBuzz
Posté le 14-02-2007 à 16:13:31  profilanswer
 


select id, lettres
from latable
where id =
(
  select max(id)
  from
  (
    select max(id)
    from latable
    where lettres > 'aze'
    union all
    select min(id)
    from latable
    where lettres = 'aze'
  ) tmp1
) tmp2


 
Du bien gore comme il faut à la MagicBuzz :sol:


Message édité par MagicBuzz le 14-02-2007 à 16:13:56
n°1514645
Fused
Posté le 14-02-2007 à 16:35:10  profilanswer
 

Merci pour ta réponse mais un truc:
   
select max(id)  
  from  
  (  
    select max(id)  
 
quésako? tu as répété non?

n°1514694
MagicBuzz
Posté le 14-02-2007 à 17:48:24  profilanswer
 

nan, parceque je prends le plus grand des ID parmis :
"le plus grand des ID plus petits que le mot cherche + le plus petit des ID parmis ceux qui sont égaux au mot recherché".
ceci dit, je pense à un truc.
mais béton, ça marche pas mon truc, faut rajouter un niveau et là ça devient trop gore, même pour moi, y'a un cas que j'ai oublié :D
 
à mon avis, le mieux c'est de re-pensé la façon dont est remplie/consultée ta table. parceque là... la plus simple c'est de faire ça en code PHP ou autre si tu ne peux pas modifier la structure de ta base.

n°1514721
darkfrost
Posté le 14-02-2007 à 18:56:38  profilanswer
 

Euh par ligne la plus proche, tu entend dans l'ordre alphabétique comme dans un dictionnaire ou juste celle qui est après ou avant ?

n°1514850
Fused
Posté le 15-02-2007 à 00:46:57  profilanswer
 

Je ne peux pas modifier la base.
 
J'ai des pages de dictionnaire que je dois afficher, quelqu'un fait une recherche avec 3 lettres.
Si j'ai une ou plusieurs page ou les mots ont ces 3 lettres j'affiche la première.
Sinon j'affiche celle d'avant.
(par exemple je peux avoir une page ou il y a BOM et là page d'après BOO, si on cherche BONJOUR, il se trouve sur BOM, donc je dois afficher celle ci).

n°1515182
darkfrost
Posté le 15-02-2007 à 17:30:59  profilanswer
 

Ben alors il te reste que la solution gore de MagicBuzz ^^ ! Par contre le cas qu'il ne prend pas en compte, je suppose que c'est si la personne rentre aaa et qu'il n'y a pas de aaa !! En mettant < plutot que > par contre !!
 
Sinon tu dois pouvoir faire ça :
SELECT MIN(id) FROM test
WHERE let =  (SELECT MAX(let) FROM test WHERE let <= 'bbb')
 
Ensuite pour gérer le cas ou l'utilisateur rentre aaa et qu'il n'y a pas de page avant, tu n'as qu'a faire un test sur MIN(id) avec la commande IS_NULL ou NVL de ton SGBD pour remplacer une éventuelle valeur nulle par l'id 1.
 
Du bien gore également ^^ !

n°1515187
MagicBuzz
Posté le 15-02-2007 à 17:49:33  profilanswer
 

ouais, en effet je ne gère pas ce cas aussi.
 
non, celui que je ne gère pas, c'est que s'il y a plusieurs pages "abc", alors je retournais la dernière quand on demande "abd" qui n'existe pas.

n°1515621
darkfrost
Posté le 16-02-2007 à 15:40:49  profilanswer
 

MagicBuzz a écrit :

ouais, en effet je ne gère pas ce cas aussi.
 
non, celui que je ne gère pas, c'est que s'il y a plusieurs pages "abc", alors je retournais la dernière quand on demande "abd" qui n'existe pas.


 
Ah oui c'est vrai !! Cependant, je pense que ce n'est pas un problème d'après ce que j'ai compris de la problématique  de Fused   :)

n°1515829
Fused
Posté le 16-02-2007 à 23:06:07  profilanswer
 

Je l'ai finalement fait en 2 requêtes et je compare les résultats, c'est moins efficace mais ça marche :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] coup de main pour une requête

 

Sujets relatifs
probleme requete MATCH mysql_fetch_???REQUETE MATCH ca marche toujours pas !
[OK] resultats X à Y sur une requeteMauvaise requête ?
[PHP] Pobleme requete mysql??requete sql ou autre
[RESOLU] Requete avec la date la plus proche de today[SQL] Petit coup de main dans une requête svp!
requete multiple PHP SQL : besoin coup de main urgentSQL besoin d'un coup de main sur une requete svp (och).
Plus de sujets relatifs à : [SQL] coup de main pour une requête


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR