IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Perdu dans les joins


Sujet :

Requêtes MySQL

  1. #1
    Membre éprouvé
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 808
    Points : 912
    Points
    912
    Par défaut Perdu dans les joins
    Bonjour, voilà mes deux tables
    --
    -- Structure de la table `categories`
    --

    CREATE TABLE categories (
    catid int(11) NOT NULL auto_increment,
    catname varchar(150) collate latin1_general_ci NOT NULL default '',
    PRIMARY KEY (catid),
    KEY catid (catid)
    ) ENGINE=MyISAM;


    --
    -- Structure de la table `news`
    --

    CREATE TABLE `news` (
    `newsid` int(11) NOT NULL auto_increment,
    `newsheadline` varchar(150) collate latin1_general_ci NOT NULL default '',
    `newsbody` text collate latin1_general_ci NOT NULL,
    `newsdate` date NOT NULL default '0000-00-00',
    `newsauthor` int(11) NOT NULL default '0',
    `newscat` int(11) NOT NULL default '0',
    `surtitle` varchar(150) collate latin1_general_ci NOT NULL default '',
    PRIMARY KEY (`newsid`),
    ) ENGINE=MyISAM;


    Je voudrais par un seul SELECT récupérer par exemple les données de news et aussi catname de categories lorsque newsdate = 2007-02-18.

    Je sais le faire avec deux requêtes : la première sur news ensuite après avoir lu mes champs faire une requête sur categories pour lire catname à partir de newscat qui est le lien avec catid.

    Un peu comme ça
    SELECT * FROM `news` WHERE `newsdate` = '2007-02-18'

    en admettant que je reçoive dans une des réponses newscat = 2, je lance ensuite cette requête

    SELECT * FROM `categories` WHERE `catid` =2

    J'espère ne pas avoir été trop confus. Je sais qu'une seule requête permet de gagner des performances, alors...

  2. #2
    Membre habitué Avatar de giltonic
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 109
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par kabkab
    Bonjour, voilà mes deux tables
    --
    -- Structure de la table `categories`
    --

    CREATE TABLE categories (
    catid int(11) NOT NULL auto_increment,
    catname varchar(150) collate latin1_general_ci NOT NULL default '',
    PRIMARY KEY (catid),
    KEY catid (catid)
    ) ENGINE=MyISAM;


    --
    -- Structure de la table `news`
    --

    CREATE TABLE `news` (
    `newsid` int(11) NOT NULL auto_increment,
    `newsheadline` varchar(150) collate latin1_general_ci NOT NULL default '',
    `newsbody` text collate latin1_general_ci NOT NULL,
    `newsdate` date NOT NULL default '0000-00-00',
    `newsauthor` int(11) NOT NULL default '0',
    `newscat` int(11) NOT NULL default '0',
    `surtitle` varchar(150) collate latin1_general_ci NOT NULL default '',
    PRIMARY KEY (`newsid`),
    ) ENGINE=MyISAM;


    Je voudrais par un seul SELECT récupérer par exemple les données de news et aussi catname de categories lorsque newsdate = 2007-02-18.

    Je sais le faire avec deux requêtes : la première sur news ensuite après avoir lu mes champs faire une requête sur categories pour lire catname à partir de newscat qui est le lien avec catid.

    Un peu comme ça
    SELECT * FROM `news` WHERE `newsdate` = '2007-02-18'

    en admettant que je reçoive dans une des réponses newscat = 2, je lance ensuite cette requête

    SELECT * FROM `categories` WHERE `catid` =2

    J'espère ne pas avoir été trop confus. Je sais qu'une seule requête permet de gagner des performances, alors...
    Donc en gros tu parles de jointure.... entre categories.catid et news.newscat
    Essaye un truc comme ca alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM news N,
    categories C
    WHERE N.newscat=C.catid
    AND N.newsdate = '2007-02-18'
    Si tes news n'ont pas forcement de catégorie alors situ veux les ramener quand meme il faudra faire une jointure gauche (left join)

    Cio
    Musique : Oasis | Photos : Panoramio

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Perdu dans les livres PHP
    Par Invité dans le forum Livres
    Réponses: 10
    Dernier message: 05/07/2007, 23h19
  2. Perdu dans les numéros de versions de l'Application Server
    Par Christophe P. dans le forum Oracle
    Réponses: 4
    Dernier message: 28/06/2007, 15h33
  3. perdu dans les fonctions en c++ builder
    Par davidc dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2007, 16h22
  4. [Débutant] Perdu dans les streams
    Par Le Furet dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 04/01/2007, 10h58
  5. Perdue dans les Response.Write...
    Par Tapioca dans le forum ASP
    Réponses: 4
    Dernier message: 11/07/2004, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo