Formation par Olivier Duffez

Formation au référencement par Olivier Duffez, créateur de WebRankInfo !
Une formule efficace alliant théorie et pratique, avec une haute disponibilité des intervenants
Cette formule a déjà convaincu plusieurs centaines d'entreprises, pourquoi pas vous ?
Réservez vite votre place en ligne (convention possible pour imputer sur le budget formation)

Formation référencement Marseille

Tri avec SELECT ..... IN SELECT ...

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
ecocentric
WRInaute accro
WRInaute accro

Inscrit le: 10 Fév 2004
Messages: 3255
Localisation: Mons

URL permanente de ce messagePosté le : Ven Mar 24, 2006 20:41    Sujet du message: Tri avec SELECT ..... IN SELECT ...

Je remets les mains dans MySQL et je me pose une question sur le tri. Je veux faire une requête du type :
SELECT1 .... WEHER champ IN (SELECT2 ... ORDER BY autrechamp)
Je veux que l'ordre de classement de SELECT1 soit celui de SELECT2 (je travaille sur deux tables différentes). Cela est-il faisable ? Y a-t-il une manière de faire ça plus intelligemment ?
Merci d'avance !
 
ecocentric Visiter le site web du posteur
MarvinLeRouge
WRInaute impliqué
WRInaute impliqué

Inscrit le: 01 Sep 2004
Messages: 439
Localisation: Toulon, France

URL permanente de ce messagePosté le : Ven Mar 24, 2006 21:37    Sujet du message: Tri avec SELECT ..... IN SELECT ...

Salut,

Je pense qu'il faut simplement remettre un order by champ à la fin.

Tu peux donner la requète complète, stp ?
 
MarvinLeRouge Visiter le site web du posteur
thierry8
WRInaute accro
WRInaute accro

Inscrit le: 11 Juil 2005
Messages: 3252

URL permanente de ce messagePosté le : Ven Mar 24, 2006 21:45    Sujet du message: Tri avec SELECT ..... IN SELECT ...

Avec mysql il n'est pas possible de faire un SELECT dans un autre.
(en tout cas, pas pour les version < que mysql 5)

EDIT:
mais il est tout à fait possible de travaillé sur deux tables différentes, et faire un trie.
Il faudrait que l'on en sache un peu plus.
 
thierry8 Visiter le site web du posteur
spidetra
WRInaute accro
WRInaute accro

Inscrit le: 07 Juil 2003
Messages: 1499
Localisation: Toulouse

URL permanente de ce messagePosté le : Ven Mar 24, 2006 22:38    Sujet du message: Tri avec SELECT ..... IN SELECT ...

Ton second SELECT sert à retourner une liste. La notion d'ordre n'intervient pas dans cette liste.
Le prédicat IN retournera les mêmes enregistrement quel que soit l'ordre de tri du second SELECT.

Code:

SELECT * FROM table1 WHERE unchamp IN ('a', 'b', 'c' ) ;
SELECT * FROM table1 WHERE unchamp IN ('b', 'c', 'a' ) ;
SELECT * FROM table1 WHERE unchamp IN ('c', 'a', 'b' ) ;


ces trois requêtes sont équivalentes.
Pour essayer de trouver une solution intelligente il faudrait la structure des tables et une requête select Wink
 
thierry8 Visiter le site web du posteur
ecocentric
WRInaute accro
WRInaute accro

Inscrit le: 10 Fév 2004
Messages: 3255
Localisation: Mons

URL permanente de ce messagePosté le : Ven Mar 24, 2006 23:25    Sujet du message: Tri avec SELECT ..... IN SELECT ...

spidetra a écrit:
ces trois requêtes sont équivalentes.


Ok, merci, c'était bien ça ma question, même si la réponse ne fait pas mon bonheur pour l'instant Wink
 
ecocentric Visiter le site web du posteur
ecocentric
WRInaute accro
WRInaute accro

Inscrit le: 10 Fév 2004
Messages: 3255
Localisation: Mons

URL permanente de ce messagePosté le : Ven Mar 24, 2006 23:38    Sujet du message: Tri avec SELECT ..... IN SELECT ...

spidetra a écrit:
lligente il faudrait la structure des tables et une requête select Wink


Prenons un exemple fictif, celui d'un site immobilier.

Je sors une liste de villes. Ce sont mes préférées : Mons, Namur puis Tournai. Je veux faire une requêtes qui me sorte les maisons à vendre en conservant l'ordre de préférence des villes.

Peut-on formuler cela en SQL ?

Edit : donc, deux tables (maisons et villes), avec un lien qui est le code postal.
 
ecocentric Visiter le site web du posteur
ecocentric
WRInaute accro
WRInaute accro

Inscrit le: 10 Fév 2004
Messages: 3255
Localisation: Mons

URL permanente de ce messagePosté le : Sam Mar 25, 2006 11:00    Sujet du message: Tri avec SELECT ..... IN SELECT ...

Une idée ?
 
ecocentric Visiter le site web du posteur
spidetra
WRInaute accro
WRInaute accro

Inscrit le: 07 Juil 2003
Messages: 1499
Localisation: Toulouse

URL permanente de ce messagePosté le : Sam Mar 25, 2006 11:58    Sujet du message: Tri avec SELECT ..... IN SELECT ...

J'aurai bien aimé avoir la structure des tables. Donc au pif je ferait :
Code:

/*==============================================================*/
/* Nom de SGBD :  MySQL 5.0                                     */
/* Date de cration :  25/03/2006 10:35:06                      */
/*==============================================================*/


drop table if exists VILLA;

drop table if exists VILLE;

/*==============================================================*/
/* Table : VILLA                                                */
/*==============================================================*/
create table VILLA
(
   IDVILLA              int not null auto_increment,
   IDVILLE              int not null,
   SUPERFICE            decimal,
   PRIX                 decimal,
   primary key (IDVILLA)
);

/*==============================================================*/
/* Table : VILLE                                                */
/*==============================================================*/
create table VILLE
(
   IDVILLE              int not null auto_increment,
   NOM                  longtext,
   primary key (IDVILLE)
);

alter table VILLA add constraint FK_ASSOCIATION_1 foreign key (IDVILLE)
      references VILLE (IDVILLE) on delete restrict on update restrict;


La requête pourrait être.
Code:

SELECT c.Nom, v.Prix, v.Superfice
FROM villa v INNER JOIN  ville c ON v.IDVille = c.IDVille
WHERE
c.IDVille IN
(
  SELECT IDVille
  FROM ville
  WHERE IDVille < 4
)
ORDER BY c.Nom desc



1. J'ai fait la jointure avec la clé primaire de la table Ville et pas avec le code postal. En effet
=> 1 Villa appartient à une ville et une seule
=> 1 Ville peut avoir plusieurs code postal ( 31000, 31500, etc...)

2. Je suppose que ton SGBD supporte les sous-requêtes ( cf. remarque de Thierry8)

3. Pour l'exemple. J'ai fait le tri sur le nom desc.

4. Dans la sous-requête, j'ai prix un filtre de limitation de la liste des villes arbitraires.


Jeu dedonnées :
Table Villa
Code:

IDVILLA   IDVILLE   SUPERFICE   PRIX
1   1   10   10
2   1   10   10
3   1   10   10
4   1   10   10
5   1   10   10
6   2   20   20
7   2   20   20
8   2   20   20
9   2   20   20
10   2   20   20
11   3   30   30
12   3   30   30
13   3   30   30
14   3   30   30
15   3   30   30
16   3   30   30
17   3   30   30
18   4   40   40
19   4   40   40
20   4   40   40
21   4   40   40
22   4   40   40
23   4   40   40


Table Ville
Code:

IDVILLE   NOM
1   MONS
2   NAMUR
3   TOURNAI
4   Bruxelles


Résultat
Code:

Nom   Prix   Superfice
TOURNAI   30   30
TOURNAI   30   30
TOURNAI   30   30
TOURNAI   30   30
TOURNAI   30   30
TOURNAI   30   30
TOURNAI   30   30
NAMUR   20   20
NAMUR   20   20
NAMUR   20   20
NAMUR   20   20
NAMUR   20   20
MONS   10   10
MONS   10   10
MONS   10   10
MONS   10   10
MONS   10   10




Le pb c'est que l'exemple que je t'ai donné ne correspond peut-être pas à ce que tu veux faire et à ta structure.
Avec cette structure tu obtiens le même résultat avec une requête bc plus simple :
Code:

SELECT c.Nom, v.Prix, v.Superfice
FROM villa v INNER JOIN  ville c ON v.IDVille = c.IDVille
WHERE
c.IDVille < 4
ORDER BY c.Nom desc


Je t'ai fait l'exemple avec IN pour te montrer. Mais si tu veux une bonne réponse, il me faut la structure des tes tables.
 
ecocentric Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

A lire dans l'actualité sur WRI :

Autres sujets de discussion :

Définitions :

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort