PHP MYSQL массив - PullRequest
       12

PHP MYSQL массив

0 голосов
/ 20 января 2012

Я запускаю следующий код на PHP, чтобы сгенерировать случайный список фильмов из базы данных, но поскольку значение genere является массивом, оно просто захватывает первое значение массива.

Как мне изменить запрос, чтобы я мог получить все значения genere в запятой строке?

      $q = "SELECT *
            FROM
              title
              INNER JOIN title_genere ON (title.id = title_genere.id_title)
              INNER JOIN genere ON (title_genere.id_genere = genere.id)
            ORDER BY RAND()  
            LIMIT 8";

$result = mysql_query($q);
while ($row = mysql_fetch_array($result)) {

    $id = $row['id'];
    $title = $row['title'];
    $year = $row['year'];
    $poster = $row['poster'];
    $poster = str_replace("./", "lib/", $poster);
    $genere = $row['genere'];

    echo "<div id='a'>";
    echo "<div id='b'>".$title.'</div>';
    echo "<div id='c'>".$year.'</div>';
    echo "<div id='d'><a href='select.php?movieid=$id'><img src='$poster' alt='' border='1' align='center' width='214' height='314' /></a></div>";
    echo "<div id='e'>".$genere.'</div>';
    echo "</div>";
    //var_dump($genere);
}

Ответы [ 3 ]

4 голосов
/ 20 января 2012

Попробуйте это:

$q = "SELECT 
          *, 
          GROUP_CONCAT(CAST(title_genere AS BINARY) SEPARATOR ',') AS generes
      FROM
          title
          INNER JOIN title_genere ON (title.id = title_genere.id_title)
          INNER JOIN genere ON (title_genere.id_genere = genere.id)
      ORDER BY RAND()  
      GROUP BY title.id
      LIMIT 8";

Это должно выбрать разделенный запятыми список по жанрам в ключе generes. Для получения дополнительной информации см. Руководство по http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

0 голосов
/ 20 января 2012

Разобрался. Я использую код ниже, чтобы генерировать то, что я хочу. Спасибо всем за помощь

SELECT 
      title.id,
      title.title,
      GROUP_CONCAT(genere SEPARATOR ' | ') AS genere,
      title.`year`,
      title.poster
    FROM
      title
      INNER JOIN title_genere ON (title.id = title_genere.id_title)
      INNER JOIN genere ON (title_genere.id_genere = genere.id)
    GROUP BY
      title.id,
      title.title,
      title.`year`,
      title.poster
    ORDER BY
      RAND()
    LIMIT 8
0 голосов
/ 20 января 2012

Не используйте GROUP_CONCAT / GROUP BY, это приводит к накладным расходам.

Сначала выберите 8 случайных заголовков (только из таблицы titles) в ассоциативный массив, проиндексированный по идентификатору заголовка.Давайте назовем его $ idx.

Далее подготовим список идентификаторов, скажем, как переменную $ ids.

Затем запустите запрос

SELECT 
 title_genere.id_title
 , genre.genre
FROM
 title_genre
 INNER JOIN genre ON title_genere.id_genere = genere.id
WHERE 
 title_genere.id_title IN ($ids)
ORDER BY
 genre

и соберите genre значения в списках в $idx:

$idx[$row['id_title']]['genres'][] = $row['genre']

Наконец, сгенерируйте HTML из $ idx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...