2012-02-18 4 views
1

У меня есть одно поле в бэкэнд, где я вводим идентификаторы, разделенные запятой - ID1, ID2, ID3 .... Это видео на самом деле. Все идентификаторы хранятся в поле product_videos в базе данных (по мере их ввода).Показать записи в базе данных, разделенные запятой

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

ответ

3

Хранение данных, разделенных запятыми, в одном поле данных - плохая идея. Это реальная боль, чтобы манипулировать, поэтому вам стоит подумать о пересмотре структуры вашего db.

Вы не указали свою структуру данных, поэтому я приведу базовый пример, а затем объясню, как его можно улучшить. Мой пример предполагает product_videos связан с конкретными пользователями:

table: `users` 
    | user_id | user_name | product_videos | 
    |---------|-----------|----------------| 
    | 1  | User1  | 1,2,3,4,6,7 | 
    | 2  | User2  | 5    | 

Вы бы возможно выполнить запрос

SELECT `product_videos` FROM `users` WHERE `user_name` = 'User1' 

Это даст вам одну строку с разделителями отдельное значение - вы бы тогда нужно использовать что-то как PHP explode(), чтобы преобразовать его в массив, а затем выполнить цикл через этот массив. Это очень плохой метод (и он будет только усложняться, когда вы попытаетесь сделать более сложные вещи).

Вместо этого было бы проще использовать таблицу ссылок. Представьте:

table: `users` 
    | user_id | user_name | 
    |---------|-----------| 
    | 1  | User1  | 
    | 2  | User2  | 

table: `videos` 
    | video_id | user_id | 
    |-----------|---------| 
    | 1   | 1  | 
    | 2   | 1  | 
    | 3   | 1  | 
    | 4   | 1  | 
    | 5   | 2  | 
    | 6   | 1  | 
    | 7   | 1  | 

В этом примере каждое видео является отдельной строки в таблице БД (и каждое видео связано с существующим пользователем). Каждая строка легко обрабатывается независимо. Это позволяет легко обрабатывать дополнительные данные для каждого видео, такие как заголовок, продолжительность выполнения, дата загрузки и т. Д.

Тогда вам нужно будет запустить запрос JOIN. например

SELECT `videos`.`video_id` FROM `videos` 
    INNER JOIN `users` ON `users`.`user_id` = `videos`.`user_id` 
    WHERE `users`.`user_name` = 'User1' 

В PHP, вы могли бы сделать что-то вроде:

$q = mysql_query("SELECT `videos`.`video_id` FROM `videos` INNER JOIN `users` ON `users`.`user_id` = `videos`.`user_id` WHERE `users`.`user_name` = 'User1'"); 

while ($row = mysql_fetch_assoc($q)) { 
    echo "VIDEO ID = " . $row["video_id"] . "<br/>"; 
} 
+0

Спасибо. Я попробую. –

Смежные вопросы