我正在尝试创建一个手风琴菜单,其中每个手风琴菜单都会根据下面的 db 示例中的类别列来提取锻炼的常规;
我的 PDO::db 设计是这样的;
id 标题 描述 类别 标签 视频 看到 date_published
如何按类别从数据库中提取信息以在我的视图文件中的 foreach 中使用它。我希望我能让我的问题足够清楚。
提前致谢。
您可以按类别排序,然后按名称(确保您对类别、名称有索引)您的查询将是:
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)
这将更容易在其他进步中更改类别的名称......但我猜你会读到这一点。