Vous n'êtes pas identifié(e).
Pages : 1
Bonsoir à tous,
Je suis novice sous PostgreSQL et en SQL en général. Je m'inscris ce jour sur ce forum pour vous poser ma première question :
Comment faire pour avoir toutes les données liées à mon article (table __post) - ce que fait la requête ci-dessous - avec en bonus le nom de l'auteur présent sur la table __person ?
SELECT * FROM __post WHERE _id = 1;
Les tables concernées :
CREATE TABLE __post (
_id BIGSERIAL NOT NULL,
_name VARCHAR(255) NOT NULL, -- titre
_content TEXT NULL, -- contenu
_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- date de création -- DEFAULT CURRENT_DATE
_revision TIMESTAMP NULL, -- date de révision
_type VARCHAR(255) NULL, -- article, page, etc...
_slug VARCHAR(255) NULL, -- slug propre à l'article, différent de l'url canonique, celle-ci étant reconstituée à partir le l'index par exemple
_description VARCHAR NULL, -- contenu utilisé pour la balise meta description
_author_id BIGINT NOT NULL, -- créateur du post (contributeur principal)
_status SMALLINT NOT NULL, -- publié, brouillon, refusé, poubelle
_comments_status BOOLEAN NULL, -- commentaires activés ou non
_keywords VARCHAR(255) NULL, -- mots-clefs pour le post
_medias VARCHAR(255) NULL, -- medias en lien avec le post
CONSTRAINT __post_pkey PRIMARY KEY (_id),
CONSTRAINT __author_id__person_fkey FOREIGN KEY (_author_id) REFERENCES __person(_id)
);
CREATE TABLE __person (
_id BIGSERIAL NOT NULL,
_user_id BIGINT NULL, -- référence éventuelle à __account
_sexe CHAR(1) NULL, -- selon la norme ISO/IEC 5218 ; inconnu : 0, homme : 1, femme : 2, non applicable : 9
_given_name VARCHAR(32) NULL, -- prénom
_additional_name VARCHAR(32) NULL, -- deuxième prénom
_family_name VARCHAR(32) NULL, -- nom de famille
_usual_name VARCHAR(32) NULL, -- nom d'usage, nom d'épouse
_nickname VARCHAR(32) NULL, -- surnom
_prefix VARCHAR(32) NULL, -- titres et civilité
_suffix VARCHAR(32) NULL, -- abréviation typographique postname (ex : s.j., o.p.)
_birth_date DATE NULL, -- date de naissance
-- [etc, je simplifie un peu, ici c'est pour l'exemple...]
_description TEXT NULL, -- 800 caractères max
CONSTRAINT __person_pkey PRIMARY KEY (_id)
);
Merci de votre attention.
Dernière modification par Olivier C (20/02/2022 00:43:17)
Hors ligne
Vous faîtes ce qu'on appelle une jointure comme expliquée dans https://docs.postgresql.fr/14/queries-t … ERIES-JOIN
Guillaume.
Hors ligne
Bonjour,
Comment faire pour avoir toutes les données liées à mon article (table __post) - ce que fait la requête ci-dessous - avec en bonus le nom de l'auteur présent sur la table __person ?
Il faut faire ce qu'on appelle une "jointure".
https://sql.sh/cours/jointures
Edit : Ooops devancé ;-)
Dernière modification par herve.lefebvre (20/02/2022 20:03:19)
Hors ligne
Oui, mais comment procéder concrètement ? Autrement dit comment concilier les deux requêtes qui suivent afin qu'elles n'en fassent qu'une seule ?
-- Sélectionner l'article avec l'ID n°1 :
SELECT * FROM __post WHERE _id = 1;
-- Sélectionner l'auteur de ce même article :
SELECT __person._given_name, __person._family_name
FROM __post
INNER JOIN __person
ON __post._author_id = __person._id AND __post._id = 1;
Dernière modification par Olivier C (20/02/2022 22:27:35)
Hors ligne
Bonsoir,
Depuis mon dernier post quelqu'un m'a donné la solution, j'étais encore loin du compte :
SELECT __post.*, __person._given_name, __person._family_name
FROM __post
INNER JOIN __person ON __post._author_id = __person._id
WHERE __post._id = 1;
Merci pour vos suggestions. Bonne soirée.
Hors ligne
Pages : 1