Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да използвате програма за картографиране на данни с sql заявки

Има много начини да се подходи към това, това е един от тях. Да приемем, че имате db схема, подобна на тази:

Сега можете да имате AlbumMapper и ArtistMapper, отговорни за извличането на тези обекти от db вместо вас:

interface AlbumMapper {

    /**
     * Fetches the albums from the db based on criteria
     * @param type $albumCriteria
     * @param ArtistMapper $artistMapper
     * 
     * Note: the ArtistMapper here can be also made optional depends on your app
     */
    public function fetchBySomeCriteria($albumCriteria, ArtistMapper $artistMapper);
}

interface ArtistMapper {

    /**
     * @param array $ids
     * @return Artist[]
     */
    public function fetchByAlbumIds(array $ids);
}

Поставих, че AlbumMapper изисква ArtistMapper, така че с този картограф Албумите винаги се връщат с техните изпълнители. Сега едно примерно внедряване може да бъде като това, където използвам малък трик за индексиране, за да прикача изпълнител към албуми:

class ConcreteAlbumMapper implements AlbumMapper {

    public function fetchBySomeCriteria($albumCriteria, ArtistMapper $artistMapper) {
        //sql for fetching rows from album table based on album criteria

        $albums = array();

        foreach ($albumRows as $albumRow) {
            $albums[$albumRow['id']] = new Album($albumRow);
        }

        $artists = $artistMapper->fetchByAlbumIds(array_keys($albums));

        //marrying album and artists
        foreach ($artists as $artist) {
            /**
             * not crazy about the getAlbumId() part, would be better to say
             * $artist->attachYourselfToAnAlbumFromThisIndexedCollection($albums);
             * but going with this for simplicity
             */
            $albums[$artist->getAlbumId()]->addArtist($artist);
        }

        return $albums;
    }

}

В този случай албумът ви ще бъде по следния начин:

class Album {

    private $id;
    private $title;
    private $artists = array();

    public function __construct($data) {
        //initialize fields
    }

    public function addArtist(Artist $artist) {
        $this->artists[] = $artist;
    }

}

В края на всичко това трябва да имате колекция от албуми, инициализирани с техните изпълнители.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пребройте броя на MySQL заявките, изпълнени на страницата

  2. eclipse - JPA обекти от таблици, без изброени схеми

  3. Таблиците, които създавам, които започват с dotNetChat_, изчезват след рестартиране на MySQL

  4. MYSQL Query - Вземете публикациите на текущия потребител и на потребителя, който той следва

  5. Проблем с Ruby on Rails с Rake