coup de main pour une requête [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 14-02-2007 à 16:13:31
|
Du bien gore comme il faut à la MagicBuzz
Marsh Posté le 14-02-2007 à 16:35:10
Merci pour ta réponse mais un truc:
select max(id)
from
(
select max(id)
quésako? tu as répété non?
Marsh Posté le 14-02-2007 à 17:48:24
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é
à 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.
Marsh Posté le 14-02-2007 à 18:56:38
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 ?
Marsh Posté le 15-02-2007 à 00:46:57
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).
Marsh Posté le 15-02-2007 à 17:30:59
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 ^^ !
Marsh Posté le 15-02-2007 à 17:49:33
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.
Marsh Posté le 16-02-2007 à 15:40:49
MagicBuzz a écrit : ouais, en effet je ne gère pas ce cas aussi. |
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
Marsh Posté le 16-02-2007 à 23:06:07
Je l'ai finalement fait en 2 requêtes et je compare les résultats, c'est moins efficace mais ça marche
Marsh Posté le 14-02-2007 à 16:05:02
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