2008-12-19 3 views
0

J'ai deux tables dans une base de données MySQLMySQL jointure interne question

urltracker avec des colonnes id et urlclicked et UrlReferrer avec id colonnes, URL_ID et UrlReferrer

le urltracker est vraiment juste une table de consultation avec le URL_ID colonne dans la table urlreferrer étant le lien entre les tables.

Exemple DDL:

CREATE TABLE urltracker (
    id   SERIAL PRIMARY KEY, 
    urlclicked VARCHAR(200) NOT NULL 
); 

CREATE TABLE urlreferrer (
    id   SERIAL PRIMARY KEY, 
    url_id  BIGINT UNSIGNED NOT NULL, 
    urlreferrer VARCHAR(200) NOT NULL 
    FOREIGN KEY(url_id) REFERENCES urltracker(id) 
); 

Ce que je Wany à faire est de joindre les deux tables de telle sorte que je puisse obtenir l'URL qui a été cliqué en regardant la table urlclicked et le nombre total de référants de la table UrlReferrer pour cette URL particulière.

Je me suis trompé avec cela pendant 2 heures et je ne reçois nulle part, je ne suis pas un expert de base de données peut quelqu'un s'il vous plaît expliquer comment y parvenir.

Merci à l'avance

+0

Quel est l'id de la table urlTracker? L'urlId? Et quel est l'id de la table de UrlReferrer? L'identifiant du referrer? –

+0

Je glissai langage de définition de données SQL pour illustrer vos tables plus clairement. –

Répondre

1

si vous le voulez pour tous les urls,

Select urlClicked, Count(*) 
    From urlReferrer R 
     Join urlTracker U 
      On U.id = R.urlId 
    Group By urlClicked 

Si vous ne souhaitez que pour un clic initial spécifié,

Select urlClicked, Count(othRef.id) 
From urlReferrer R 
     Join (urlTracker U Join urlReferrer othRef 
        On othRef.urlId = U.urlId) 
      On U.id = R.urlId 
Where R.id = [Specified Referrer's Id] 
Group By urlClicked 

- édité pour corriger l'ordre de clause Where

+0

Bon, sauf WHERE doit venir avant GROUP BY. –

+0

ahh, merci! Edité pour coprrect que ... –

1

Je pense:

SELECT ut.urlclicked, COUNT(ur.id) 
FROM urltracker ut JOIN urlreferrer ur ON (ut.id = ur.url_id) 
GROUP BY ut.urlclicked 

devrait le faire.