【问题标题】:Select all items in a table and display them in order depending on their parent Id's选择表中的所有项目并根据其父 ID 按顺序显示它们
【发布时间】:2014-02-28 22:32:37
【问题描述】:

我有一个项目表、一个类型表和一个部门表。我需要选择所有项目,这很容易,但我想按部门和类型对它们进行排序,然后按其类型和部门的标题按顺序显示它们。

我想先按部门“列”值对它们进行排序(网页上会有 3 列)。然后按每个列的“Order”值对每列中的部门进行排序。然后按“CreatedDate”(与第一个添加项目的创建日期相同)对每个类型进行排序。然后按该项目的“CreatedDate”对每个类型下的每个项目进行排序。

再次,我可以轻松地从部门中选择 *,然后 foreach 选择类型,然后 foreach 选择项目,但是当我有数千个项目时,它会变得混乱和缓慢。

表格:

Items - Id, Type_Id, Title, CreatedDate
Types - Id, Department_Id, Title, CreatedDate
Departments - Id, Title, Column, Order

示例数据:

Items
1 - 1 - "Apple" - 05/29/2010
2 - 2 - "Corn" - 05/28/2010
3 - 1 - "Orange" - 05/27/2010
4 - 3 - "Beef" - 05/22/2010
5 - 4 - "Screwdriver" - 05/22/2010
6 - 4 - "Hammer" - 05/23/2010
7 - 1 - "Banana" - 05/24/2010
8 - 5 - "Lamp" - 05/22/2010
9 - 6 - "Fork" - 09/26/2013
10 - 6 - "Spoon" - 09/27/2013

Types
1 - 1 - "Fruit" - 05/24/2010
2 - 1 - "Vegetable" - 05/28/2010
3 - 1 - "Meat" - 05/22/2010
4 - 2 - "Handtools" - 05/22/2010
5 - 4 - "Lighting" - 05/22/2010
6 - 3 - "Utensils" - 09/26/2013

Departments
1 - "Food" - 1 - 1
2 - "Tools" - 2 - 1
3 - "Kitchen" - 3 - 2
4 - "Living Room" - 3 - 1

这将在 div 或表格的实际列中显示如下:


第 1 列

食物

  1. 肉类
    • 牛肉
  2. 水果
    • 香蕉
    • 橙色
    • 苹果
  3. 蔬菜
    • 玉米

第 2 列

工具

  1. 手工工具
    • 螺丝刀
    • 锤子

第 3 栏

客厅

  1. 照明

厨房

  1. 餐具
    • 分叉
    • 勺子

【问题讨论】:

  • 那么,你在为哪一部分苦苦挣扎?

标签: php html mysql select


【解决方案1】:

我认为您需要从正确地将所有表连接在一起以获得一个大型数据集团开始,然后使用 PHP 检查何时显示不同的标题:

SELECT
    i.Title,
    t.Title,
    d.Title
FROM
    Items i
    LEFT JOIN Types t
        ON i.type_id = t.Id
    LEFT JOIN Departments d
        ON t.Department_Id = d.Id
ORDER BY
    d.Column ASC,
    d.Order ASC,
    t.CreateDate ASC,
    i.CreateDate ASC

【讨论】:

  • 很高兴我能提供帮助,如果您对区分 PHP 标头的逻辑感到困惑,请告诉我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多