Tri par date simultanémant sur deux tables différentes

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 : Tri par date simultanémant sur deux tables différentes

Re: Tri par date simultanémant sur deux tables différentes

par AoSiX » 28 juil. 2010, 14:05

Alors juste pour clore le sujet et le passé en résolu, la requête marche à un détail près, l'expression apres le FROM doit obligatoirement avoir un alias, en gros ça donne :
SELECT id, Date, type
FROM (
  SELECT Client_Like_ID AS id, Date, 'like' AS type FROM Client_Like
    UNION ALL
  SELECT Client_Reco_ID, Date, 'reco' FROM Client_Reco
) as tmp
ORDER BY Date DESC LIMIT 0,5
Merci beaucoup pour ton aide !

Re: Tri par date simultanémant sur deux tables différentes

par AoSiX » 28 juil. 2010, 13:18

Le but est d'avoir ... les 5 dernières des deux tables confondues
Oui c'est cela :)

Si c'est la deuxième proposition et que tu souhaites conserver une trace de la table d'origine, ceci est probablement une solution intéressante :
SELECT id, Date, type FROM (
  SELECT Client_Like_ID AS id, Date, 'like' AS type FROM Client_Like
    UNION ALL
  SELECT Client_Reco_ID, Date, 'reco' FROM Client_Like
)
ORDER BY Date DESC LIMIT 0,5
Je testerai ça apres ma pause déjeuner, merci beaucoup en tout cas de ton aide =D>

Re: Tri par date simultanémant sur deux tables différentes

par Ganesh » 28 juil. 2010, 12:59

Le but est d'avoir les 10 dernières entrées de chaque table ou les 5 dernières des deux tables confondues comme tu le demandais dans ton premier message ?
Si c'est la deuxième proposition et que tu souhaites conserver une trace de la table d'origine, ceci est probablement une solution intéressante :
SELECT id, Date, type FROM (
  SELECT Client_Like_ID AS id, Date, 'like' AS type FROM Client_Like
    UNION ALL
  SELECT Client_Reco_ID, Date, 'reco' FROM Client_Like
)
ORDER BY Date DESC LIMIT 0,5

Re: Tri par date simultanémant sur deux tables différentes

par AoSiX » 28 juil. 2010, 12:42

Solution super sale, mais qui marche trouvée :
(SELECT Client_Like_ID as ID, Date, 1 FROM Client_Like ORDER BY Date LIMIT 10)
UNION ALL
(SELECT Client_Reco_ID, Date, 2 FROM Client_Reco ORDER BY Date LIMIT 10)
ORDER BY Date
Si 2-> Reco ; si 1 -> like

Si il y a mieux dite le moi :p

Re: Tri par date simultanémant sur deux tables différentes

par Ganesh » 28 juil. 2010, 12:39

Ton champ est nommé CLID mais il contient les CRID avec leurs dates respectives. Tout va dépendre de l'utilisation que tu veux faire du résultat de ta requête.
Sinon, tu peux simplifier ta requête :
SELECT Client_Like_ID, Date FROM Client_Like
  UNION
SELECT Client_Reco_ID, Date FROM Client_Reco
ORDER BY Date DESC LIMIT 0,5
Attention aussi à tes champs nommés par des mots réservés SQL, cela peut te conduire à quelques surprises... Je te conseille de changer cela.

Re: Tri par date simultanémant sur deux tables différentes

par AoSiX » 28 juil. 2010, 12:33

Salut,

j'ai effectivement tenté quelquechose comme cela :
(SELECT Client_Like_ID as CLID, Date FROM Client_Like ORDER BY Date LIMIT 10)
UNION
(SELECT Client_Reco_ID as CRID, Date FROM Client_Reco ORDER BY Date LIMIT 10)
ORDER BY Date
Avec des résultats satisfaisant, cependant je n'ai que la colonne CLID et Date, pas de CRID dans le cas ou il existe, donc je perd la possibilité d'en faire quoi que ce soit.

Re: Tri par date simultanémant sur deux tables différentes

par Ganesh » 28 juil. 2010, 12:28

Bonjour,

J'opterais plus pour un UNION de façon à regrouper les deux tables puis à faire le tri sur le champ commun.

Tri par date simultanémant sur deux tables différentes

par AoSiX » 28 juil. 2010, 11:46

Hello, mon titre me fait peur, mais mais parlons technique ce sera plus facile ^^

J'ai deux tables :

Code : Tout sélectionner

A ----------------- A_ID | Date

Code : Tout sélectionner

B ----------------- B_ID | Date
Il y a d'autres champs, certains commun, mais qui ne rentre pas en compte dans ma sélection.

J'aimerai faire un SELECT sur ces deux tables en même temps pour obtenir les 5 dernières entrées trier par date.

Schématisons

Code : Tout sélectionner

A ----------------- A_ID | Date ----------------- 1 - 1 ----------------- 2 - 4 ----------------- 3 - 5 -----------------

Code : Tout sélectionner

B ----------------- B_ID | Date ----------------- 1 - 2 ----------------- 2 - 3 ----------------- 3 - 6 -----------------
Je voudrait obtenir avec ma requêtes ( en order by Date ASC ) A1, B1, B2, A2, A3..

Quelle est la bonne solution ? Je me pencherai sur une jointure mais je suis dans le flou.

EDIT : Mon SGBD est MySQL