Page 1 sur 1

jointure SQL

Posté : 04 mars 2010, 21:36
par Esmeralda
Bonjour, j'ai un petit problème avec une de mes requêtes et je sollicite donc votre aide.
La partie de la base relationnelle qui nous intéresse est la suivante :
J'ai trois tables, une table people où le champ qui nous intéresse plus particulièrement "timestamp", la table "site", les deux tables étant relier par une table "ln_connecter". Après avoir récupérer le timestamp suivant :
$timestamp_10min = time() - (60 * 10);
je souhaite compter le nombre de personne connecté il y a moins de 10 min sur le site ayant pour id, $id_site :
ce qui me donne la requête suivante :
$sql = "SELECT COUNT(*) FROM ln_connecter,people WHERE ln_connecter.id_site = '$id_site' && people.timestamp > '$timestamp_10min'";
Malheureusement, cela ne marche pas, je vous demande donc votre aide. J'espère avoir été assez clair.
-- Structure de la table `people`
CREATE TABLE IF NOT EXISTS `people` (
  `id_people` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ip` varchar(255) NOT NULL,
  `timestamp` int(11) NOT NULL,
  `id_pays` int(11) NOT NULL,
  PRIMARY KEY (`id_people`,`id_pays`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- Structure de la table `ln_connecter`

CREATE TABLE IF NOT EXISTS `ln_connecter` (
  `id_people` int(11) unsigned NOT NULL,
  `id_site` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id_people`,`id_site`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Re: jointure SQL

Posté : 04 mars 2010, 23:52
par Mercantos
Bonjour Esmeralda,

A première vue, je dirais qu'il manque une jointure entre les deux tables. Tu fais une requête sur deux table sans dire à MySql comment les joindre entre elle.

Je suppose que le problème est que tu as trop de résultats ?

Re: jointure SQL

Posté : 05 mars 2010, 00:41
par Esmeralda
Oui, exactement. J'ai trop bien plus de résultat que pourrait contenir les deux tables réunis.

Re: jointure SQL

Posté : 05 mars 2010, 01:04
par Esmeralda
Après avoir fais quelque essais, je ne suis pas parvenue à trouver le resultat souhaiter... :(
$sql = "SELECT COUNT(*) FROM ln_connecter LEFT JOIN people ON ln_connecter.id_site = '$id_site' && people.timestamp > '$timestamp_10min'";

Re: jointure SQL

Posté : 05 mars 2010, 01:36
par Mercantos
La partie ON du LEFT JOIN doit décrire comment les deux table se connectent entre elles. Ici l'id en commun semble être id_people.

Il te faut donc une requête qu type :
SELECT COUNT(*) 
FROM ln_connecter ln
LEFT JOIN people p ON ln.id_people = p.id_people
WHERE ln.id_site = '1' 
AND p.timestamp > '1267744721'
Une autre possibilité (à tester pour voir laquelle est la plus intéressante serait de calculer le timestamp dans la requête plutôt qu'en PHP :
SELECT COUNT(*) 
FROM ln_connecter ln
LEFT JOIN people p ON ln.id_people = p.id_people
WHERE ln.id_site = '1' 
AND p.timestamp > UNIX_TIMESTAMP() - (60*10)
Bon courage pour la suite.

Re: jointure SQL

Posté : 05 mars 2010, 04:10
par Esmeralda
Merci beaucoup, tu m'as appris quelque chose qui me servira beaucoup.
Merci encore.