php - 从数据库中提取数据,其中每个数组保存列名称类别及其子信息

标签 php mysql database sorting pull

我正在尝试创建一个 Accordion 菜单,其中每个 Accordion 菜单都会根据下面的数据库示例中的类别列来拉动锻炼的常规; Accordian menu that the db informations manually put

我的 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/

相关文章:

database - Lift 映射器中的外键约束

php - 在数组中搜索值匹配并替换值 - php

php - HTML a 标签导致空格

c# - 使用 MySqlBackup.NET 导出数据库时出现异常

Javascript 正在重新加载时执行

c# - 如何在 Visual Studio 中创建一个已经存在的数据库?

java - Hibernate 为列设置 null 值,而不是在 saveOrUpdate() 上删除整行

php - 在 Laravel 中有没有办法向请求数组添加值?

php - 我如何区分 curl 请求与浏览器请求

mysql - 将 mysql 查询转换为 postgresql 后出现错误