Tri avec SELECT ..... IN SELECT ...
8 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
-

ecocentric - WRInaute accro

- Messages: 3577
- Inscription: Mar Fév 10, 2004 16:40
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 !
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 !
-

MarvinLeRouge - WRInaute impliqué

- Messages: 451
- Inscription: Mer Sep 01, 2004 20:10
Salut,
Je pense qu'il faut simplement remettre un order by champ à la fin.
Tu peux donner la requète complète, stp ?
Je pense qu'il faut simplement remettre un order by champ à la fin.
Tu peux donner la requète complète, stp ?
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.
(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.
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.
ces trois requêtes sont équivalentes.
Pour essayer de trouver une solution intelligente il faudrait la structure des tables et une requête select
Le prédicat IN retournera les mêmes enregistrement quel que soit l'ordre de tri du second SELECT.
- Code: Tout sélectionner
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
-

ecocentric - WRInaute accro

- Messages: 3577
- Inscription: Mar Fév 10, 2004 16:40
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
-

ecocentric - WRInaute accro

- Messages: 3577
- Inscription: Mar Fév 10, 2004 16:40
spidetra a écrit:lligente il faudrait la structure des tables et une requête select
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.
J'aurai bien aimé avoir la structure des tables. Donc au pif je ferait :
La requête pourrait être.
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
Table Ville
Résultat
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 :
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.
- Code: Tout sélectionner
/*==============================================================*/
/* 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: Tout sélectionner
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: Tout sélectionner
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: Tout sélectionner
IDVILLE NOM
1 MONS
2 NAMUR
3 TOURNAI
4 Bruxelles
Résultat
- Code: Tout sélectionner
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: Tout sélectionner
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.
8 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Outils Google pour les entreprises : Google Agency Toolkit
- De la publicité ciblée dans les cartes de Google Local
- Les adresses IP de Google et Googlebot
- Google écrit parfois au webmaster en cas de blacklistage
- Liste des produits et services de Google
- Google AdWords introduit le concept de niveau de qualité
- Mise à jour du générateur de mots clés dans AdWords
- Récapitulatif sur Google AdWords
- Changement de design de WRI
- Les bonnes stratégies de mots-clés pour le référencement
- Select where MYSQL
- robots et <select>
- select et onChange
- Js & select
- balise select
- select max(id) et clause where
- Probleme de SELECT DISTINCT
- <SELECT> Soucis d'ergonomie
- Update / Select et Mysql
- Probleme select SQL
- question sur un <select>
- Code deffectueux : select from
- affichage d'un select from
- Balise Select et Lien
- SELECT de plusieurs identifiants ?
Consultez la description détaillée des produits ou services de Google suivants : Google Local Business Ads
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

le forum