我正在尝试创建一个 Accordion 菜单,其中每个 Accordion 菜单都会根据下面的数据库示例中的类别列来拉动锻炼的常规;
我的 PDO::db 设计是这样的;
ID 标题 描述 类别 主题标签 视频 见过 发布日期
如何按类别从数据库中提取信息,以便在 View 文件的 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 获取结果。您可能想研究关系数据库设计和 Normalization
示例(未测试)表格布局:
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)
这将使更改类别名称以及其他进步变得更加容易......但我想您会读到这一点。
关于php - 从数据库中提取数据,其中每个数组保存列名称类别及其子信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19999622/