8791 sujets

Développement web côté serveur, CMS

Bonjour,

Voila j'ai 2 tables



CREATE TABLE `titles` (
  `id_titre` int(10) NOT NULL auto_increment,
  `id_artist` int(10) NOT NULL,
  `title` varchar(250) collate utf8_unicode_ci NOT NULL,
  `description` text collate utf8_unicode_ci,
  `keyword` text collate utf8_unicode_ci NOT NULL,
  `duration` int(11) default NULL,
  `thumbnail` varchar(250) collate utf8_unicode_ci default NULL,
  `status` int(5) NOT NULL,
  PRIMARY KEY  (`id_titre`),
  KEY `titre` (`title`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;



et




CREATE TABLE `videos` (
  `id_video` int(10) NOT NULL auto_increment,
  `source` varchar(100) character set latin1 NOT NULL,
  `link` varchar(250) character set latin1 default NULL,
  `statistic` int(10) NOT NULL,
  `id_titre` int(10) NOT NULL,
  PRIMARY KEY  (`id_video`),
  KEY `source` (`source`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;




le point de jonction entre les 2 tables : id_titre

LE probleme est que dans la table videos j'ai des doublons, il faudrait faire un Distinct sur le link du type pour filtrer les doublons


SELECT DISTINCT link from videos



La question : Comment faire une requete qui fusionne correctement les 2 tables sans les doublons
du style :


SELECT ti.*, vi.* From titles ti inner join videos vi on (ti.id_titre=vi.id_titre)



je n'arrive pas a faire 2 choses :
- filtrer les doublons sur link
- filtre les link vide

une idée ? Smiley cligne
Jean Marc
Modifié par oobox (11 Apr 2008 - 02:22)
SELECT ti.*, vi.* From titles ti inner join videos vi on (ti.id_titre=vi.id_titre)
ne filtre pas les doublons
comment ajouter un test sur vi.link du style "SELECT DISTINCT link from videos"
Salut oobox Smiley cligne ,

je suppose qu'il serait possible avec des SELECT imbriqués et à coup de CONCAT de ne le faire qu'en une seule fois mais d'une part ça serait bien moins lisible que plusieurs requêtes consécutives et d'autre part ça n'irait à mon humble avis pas plus vite. Pour ne pas prendre les lignes avec link vide il suffit de rajouter dans la clause WHERE link <> '' Smiley langue ...
Sinon il manque surtout le critère qui permet de décider quelle ligne prendre parmi celles qui ont un même link. En supposant que cela n'a pas d'importance on pourrait dire par exemple que c'est la dernière insérée, ce qui donnerait :
[b]requête 1[/b]

CREATE TABLE temp_videos AS (
SELECT link, max(id_video) AS id_video_ok FROM videos WHERE link <> '' GROUP BY link )

[b]requête 2[/b]
SELECT ti.*, vi.* From titles ti inner join videos vi on (ti.id_titre=vi.id_titre) 
WHERE vi.id_video IN (SELECT id_video_ok FROM temp_videos)

A+ Smiley smile