显示以逗号分隔的数据库条目

时间:2012-02-18 22:06:46

标签: php database

我在后端有一个字段,我在其中输入以逗号分隔的ID - ID1,ID2,ID3 ....实际上这些是视频。所有ID都存储在数据库中的product_videos字段中(因为它们是键入的)。

如何在前端回复这些ID,以便他们都展示产品?

1 个答案:

答案 0 :(得分:3)

在一个数据字段中存储逗号分隔数据是个坏主意。操作真的很痛苦,所以你应该考虑修改你的数据库结构。

您尚未展示您的数据结构,因此我将给出一个基本示例,然后解释如何改进它。我的示例假定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       |

在此示例中,每个视频都是db表中的一个单独行(并且每个视频都链接到现有用户)。每行都可以独立处理。这使得处理每个视频的额外数据变得非常容易,例如标题,运行时长度,上传日期等。

然后,您需要运行JOIN查询。 e.g。

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/>";
}