Classement différé

Répondre
allserv
le 08/11/2005 à 12:31
allserv
Bonjour,

Voilà j'ai un gros problème, j'ai un classement de photos qui se fait via un top 100.
Le problème c'est que c'est beaucoup trop long à laisser en temps réel, je souhaiterais donc trouver une solution.

Par exemple utiliser une tache cron qui toutes les 10min créent les pages du top.

J'aimerais avoir vos conseils quant à la réalisation de ce petit script.

Quelle est la meilleure façon de faire ?

Merci d'avance
manu56
le 08/11/2005 à 12:52
manu56
salut,
si tu creer un tableau en stockant toutes les id des images stocké sur une bdd, je ne pense pas que ca fasse trop lourd de manipuler ce tableau comme tu le souhaite après ...

Enfin je ne pense pas...

Quel est ton critère de classement?
LupusMic
le 10/11/2005 à 11:15
LupusMic
Pourrait-on voir la tête de la table ? Si ça se trouve, c'est simplement un index qui manque.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
allserv
le 15/11/2005 à 22:32
allserv
Voilà la tête de mes tables :

-- --------------------------------------------------------

--
-- Structure de la table `gaybesac_albums`
--

CREATE TABLE `gaybesac_albums` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_membre` int(10) unsigned NOT NULL default '0',
`type` tinyint(1) unsigned NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
KEY `id_membre` (`id_membre`)
) TYPE=MyISAM AUTO_INCREMENT=1651 ;

-- --------------------------------------------------------

--
-- Structure de la table `gaybesac_basic`
--

CREATE TABLE `gaybesac_basic` (
`id` int(10) unsigned NOT NULL auto_increment,
`pseudo` varchar(30) NOT NULL default '',
`pass` varchar(10) NOT NULL default '',
`acces` tinyint(1) unsigned NOT NULL default '1',
`email` varchar(50) NOT NULL default '',
`nom` varchar(30) NOT NULL default '',
`prenom` varchar(30) NOT NULL default '',
`age` tinyint(2) unsigned NOT NULL default '0',
`sexe` tinyint(1) unsigned NOT NULL default '1',
`adresse` varchar(150) NOT NULL default '',
`ville` varchar(150) NOT NULL default '',
`situation_pro` varchar(150) NOT NULL default '',
`titre` varchar(150) NOT NULL default '',
`annonce_profil` text NOT NULL,
`orient_sexe` tinyint(1) unsigned NOT NULL default '0',
`attitude_sexe` tinyint(1) unsigned NOT NULL default '0',
`pays_renc` tinyint(1) unsigned NOT NULL default '0',
`dept1` tinyint(2) unsigned NOT NULL default '0',
`dept2` tinyint(2) unsigned NOT NULL default '0',
`dept3` tinyint(2) unsigned NOT NULL default '0',
`dept4` tinyint(2) unsigned NOT NULL default '0',
`origines` tinyint(1) unsigned NOT NULL default '0',
`situation` tinyint(1) unsigned NOT NULL default '0',
`yeux` tinyint(1) unsigned NOT NULL default '0',
`cheveux` tinyint(2) unsigned NOT NULL default '0',
`cheveux_nx` tinyint(1) unsigned NOT NULL default '0',
`taille` tinyint(3) unsigned NOT NULL default '0',
`poids` tinyint(1) unsigned NOT NULL default '0',
`pilosite` tinyint(1) unsigned NOT NULL default '0',
`apparence` tinyint(1) unsigned NOT NULL default '0',
`style` tinyint(1) unsigned NOT NULL default '0',
`tabac` tinyint(1) unsigned NOT NULL default '0',
`opinion_tabac` tinyint(1) unsigned NOT NULL default '0',
`lieu_rencontre` tinyint(1) unsigned NOT NULL default '0',
`webcam` tinyint(1) unsigned NOT NULL default '0',
`check_email` tinyint(1) unsigned NOT NULL default '0',
`offres` tinyint(1) unsigned NOT NULL default '0',
`connu` tinyint(1) unsigned NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
`last_visite` datetime NOT NULL default '0000-00-00 00:00:00',
`date_expiration` date default NULL,
`vus` int(10) unsigned NOT NULL default '0',
`actif` tinyint(1) unsigned NOT NULL default '0',
`clef` varchar(12) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id_3` (`id`),
UNIQUE KEY `id_2` (`id`),
KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1091 ;

-- --------------------------------------------------------

--
-- Structure de la table `gaybesac_photos_membres`
--

CREATE TABLE `gaybesac_photos_membres` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_album` int(10) unsigned NOT NULL default '0',
`actif` tinyint(1) unsigned NOT NULL default '0',
`photo` varchar(30) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
KEY `id_album` (`id_album`)
) TYPE=MyISAM AUTO_INCREMENT=2836 ;
LupusMic
le 16/11/2005 à 17:15
LupusMic
Et la requête choisie ?

Au fait, que donne EXPLAIN lorsque tu analyse la requête SQL ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
allserv
le 17/11/2005 à 13:46
allserv
Voilà la requete pour récuperer :

$sql = "SELECT COUNT(t2.id) AS nbre_votes, AVG( t2.note ) AS moyenne, t2.id_photo, t1.id AS id_top, t3.id AS id_membre, t3.pays_renc, t3.age, t3.taille, t3.poids, t3.cheveux, t3.yeux
FROM ".$GLOBALS["table_top"]." AS t1
LEFT JOIN ".$GLOBALS["table_votes"]." AS t2 ON t2.id_top = t1.id OR t2.id_top IS NULL
LEFT JOIN ".$GLOBALS["table_basic"]." AS t3 ON t3.id = t1.id_membre
WHERE t1.top='".$session_top."' AND t3.sexe='".$type_top."' AND DATE_FORMAT(t1.date,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
GROUP BY t2.id_photo
ORDER BY moyenne DESC
LIMIT $debut,$nbre_top";
$query = mysql_query($sql) or die("Erreur sur $sql :<br><br>".mysql_error());


Par contre je fais un affichage page par page et donc je dois recuperer le nbre total :

// Recuperation du nbre total 
$sql = "SELECT COUNT(t3.id) AS nbre FROM ".$GLOBALS["table_top"]." AS t1, ".$GLOBALS["table_albums"]." AS t2, ".$GLOBALS["table_photos"]." AS t3 LEFT JOIN ".$GLOBALS["table_votes"]." AS t4 ON t4.id_top=t1.id WHERE t1.top='".$session_top."' AND DATE_FORMAT(t1.date,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m') AND t1.id_membre=t2.id_membre AND t2.id=t3.id_album AND t3.actif=1 AND t4.id_photo=t3.id GROUP BY t3.id";
$query = mysql_query($sql) or die("Erreur sur $sql :<br><br>".mysql_error());
while($data = mysql_fetch_array($query, MYSQL_ASSOC)){
$tab[] = $data["nbre"];
}

$nbre_total = count($tab);
$nbre_final = ($nbre_total<100) ? $nbre_total:100;
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours