sql >> Database teknologi >  >> RDS >> Mysql

Sådan får du postlisten og de tilhørende tags med det mindste antal forespørgsler

Hvis du indekserer $tagsResult af postId , hvilket du kan gøre ved at bruge FETCH_GROUP , så kan du fjerne den indre indlejrede løkke og få fat i alle tags med et bestemt postId på konstant tid:

$sql = "
    SELECT pt.idPost, — select idPost first so it’s grouped by this col
           t.*
      FROM tags t JOIN poststags pt ON t.id=pt.idTag 
     WHERE pt.idPost IN (array of post ids)
";

$stmt=$db->prepare($sql);
$stmt->execute();

$tagsResult = $smt->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_OBJ);
//$tagsResult is now grouped by postId
//see https://stackoverflow.com/questions/5361716/is-there-a-way-to-fetch-associative-array-grouped-by-the-values-of-a-specified-c

foreach($postsResult as &$post) {

    if(isset($tagsResult[$post->id])) {
        $post->tags = $tagsResult[$post->id];
    }
    else {
        $post->tags = array();
    }   
}



  1. Opdater mysql-tabel med udvalgt forespørgsel fra en anden database

  2. Sådan installeres SQL Developer på en Mac

  3. Hvilken lås, hvis nogen, bruger 'CREATE TRIGGER' i PostgreSQL 9.4.2

  4. Hvordan nulstiller jeg mysql root adgangskode?