Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać listę postów i powiązane tagi z najmniejszą liczbą zapytań?

Jeśli indeksujesz $tagsResult przez postId , co możesz zrobić za pomocą FETCH_GROUP , możesz usunąć wewnętrzną zagnieżdżoną pętlę i pobrać wszystkie tagi z określonym postId w stałym czasie:

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak w MySQL zwrócić tydzień miesiąca?

  2. Nie można zaimportować MySQLdb - Python - Windows 8.1

  3. Jak ustawić SQL_BIG_SELECTS=1 w instrukcji Laravel Join?

  4. Niestandardowa kolejność Mysql według i alfabetyczna według:

  5. mysql wybierz różne wartości oddzielone przecinkami