2010-12-04 3 views
1

Voici mes tables et ma méthode actuelle. Trop de requête, donc le moyen le plus efficace de le faire?manière efficace d'interroger une liste de contenu, chaque contenu doit obtenir la liste des balises et des catégories

Table: contents 
content_id 

Table: taxonomy_terms 
tt_id 
type (tag or category) 
name 

Table: relationships 
content_id 
tt_id 

Pseudo Code:

mysql: query limit 20 contents from **contents** 
php: for each content 
    mysql: query tags and categories from **relationships** with content_id 

Number of queries: 1 + 20 = 21 

Répondre

1

Vous pouvez itérer la première requête d'abord, et faire quelque chose comme

$ids = array(); 
$contents = array(); 
while ($row = $res->fetch_assoc()) 
{ 
    /* your existing code */ 
    /* such as fill-up an array */ 
    $contents[$row['content_id']] = $row; 

    $ids[] = $row['content_id']; 
} 

$sql = 'SELECT ... WHERE tt_id in('.implode(',', $ids).')'; 
/* fetch the tag/category results */ 
/* and update $contents with tag/category results */ 

Avec cela, besoin de deux requêtes.
Et une boucle PHP supplémentaire pour 20 contenus que vous avez dans la première requête

Questions connexes