0

我正在尝试创建一个手风琴菜单,其中每个手风琴菜单都会根据下面的 db 示例中的类别列来提取锻炼的常规; 数据库信息手动放置的手风琴菜单

我的 PDO::db 设计是这样的;

id 标题 描述 类别 标签 视频 看到 date_published

如何按类别从数据库中提取信息以在我的视图文件中的 foreach 中使用它。我希望我能让我的问题足够清楚。

提前致谢。

4

1 回答 1

1

您可以按类别排序,然后按名称(确保您对类别、名称有索引)您的查询将是:

SELECT * FROM `workouts` ORDER BY category, name

然后,当您迭代时,检查类别是否更改,如果,关闭子列表并打开一个新的列表,首先显示该类别。

另一个稍微干净的解决方案是迭代两次,使用第一个循环按类别对关联数组进行排序:

$sth = $dbh->prepare("SELECT * FROM workouts");
$sth->execute();

$workouts = array();
/* First Loop */
while(($result = $sth->fetch(PDO::FETCH_ASSOC)) !== FALSE) {
    $workouts[$result['category']][] = $result; 
}

现在您可以循环使用 $workouts,使用键作为类别。

foreach($workouts as $category => $workoutsByCategory) {
  //display category and start subset
  foreach($workoutsByCategory as $workout) {
    //display workout
  }
}  

如果使用第二个表来保存类别名称并在锻炼表中使用该表的 id 进行连接,那会更干净。然后,您可以使用 join 获得结果。您可能想研究关系数据库设计和规范化

示例(未测试)表格布局:

table "workouts"
id | category_id | title | description | hashtags | video | seen | date_published
table "categories"
id | title

然后您可以使用以下方法获得结果:

SELECT workouts.*, categories.title as category_title FROM workouts LEFT JOIN categories ON (category.id = workouts.category_id)

这将更容易在其他进步中更改类别的名称......但我猜你会读到这一点。

于 2013-11-15T11:29:27.313 回答