如何对多个用户在同一个表中插入不同位置的列表进行排序/排序?
问题描述:
使用:PHP,MySQL如何对多个用户在同一个表中插入不同位置的列表进行排序/排序?
案例:用户可以添加/编辑/删除新闻系统中的类别。有一个主要用户也可以添加/编辑/删除类别。主用户添加的类别也将显示在“基本”用户的类别列表中。 “基本”用户应该能够添加类别并更改他的类别的位置和主用户的类别,以便他可以创建他自己的类别列表。
现在我有这些表(基本的例子):
table: users {
id,
name
}
table: categories
{
id,
user_id,
title,
position
}
当一个“基本”的用户我会像这样的网页上显示的列表:
SELECT title
FROM categories
WHERE user_id = #BASIC_USER_ID OR user_id = #MAIN_USER_ID
ORDER BY position
哪有我使它成为一个“基本”用户可以使用位置列创建自己的排序顺序。我需要不同的列/表格吗?不要忘记,数百个用户可以共享类别,因此当添加新类别作为主用户时,我不想更新数百个表格,因此所有“基本”用户也都在其列表中拥有类别。它应该在飞行中维护位置等。
谢谢您的帮助提前!
答
我想你想:
使用位置栏设置一个int值来表示它的秩序,只有“基本用户”结果应在查询中使用呢?
如果是这样你可以在$ VAR添加条件您的SQL查询...
$orderQ = (BASIC_USER_ID !=false) ? "ORDER BY position" : "";
SELECT title FROM categories WHERE user_id = BASIC_USER_ID OR user_id = MAIN_USER_ID $orderQ
类似的东西可能工作..
但是如果你希望每个用户都有自己的独特的排序,我想补充一个新表:
USER_ID,位置,ITEM_ID
使用该表来确定用户的排序值,如果为空,恢复为默认值也许。
table: users {
id,
name
}
table: categories
{
id,
user_id,
title,
position // revert to for default
}
table: positions
{
user_id,
position,
category_id
}
如果你想允许不仅仅是位置,为什么复制更多的类别表,并用它来存储的类别表中的个人引用的更多
;延伸位置表以包括所述用户选择标题等....
答
表:
用户:
+-------+----------------------+
| id | name |
+-------+----------------------+
| 1 | "Admin" |
+-------+----------------------+
| 2 | "Blue User" |
+-------+----------------------+
| 3 | "Red User" |
+-------+----------------------+
类别:
+-------+----------------------+-------------+
| id | title | created_by |
+-------+----------------------+-------------+
| 1 | "Category 1" | 1 |
+-------+----------------------+-------------+
| 2 | "Category 2" | 1 |
+-------+----------------------+-------------+
| 3 | "Category 3" | 1 |
+-------+----------------------+-------------+
user_category:
+---------+--------------+-----------+--------------------+
| user_id | category_id | position | custom_title |
+---------+--------------+-----------+--------------------+
| 1 | 1 | 1 | NULL |
+---------+--------------+-----------+--------------------+
| 1 | 2 | 2 | NULL |
+---------+--------------+-----------+--------------------+
| 1 | 3 | 3 | NULL |
+---------+--------------+-----------+--------------------+
| 2 | 1 | 3 | "Red Category 1" |
+---------+--------------+-----------+--------------------+
| 2 | 2 | 2 | "Red Category 2" |
+---------+--------------+-----------+--------------------+
| 2 | 3 | 1 | "Red Category 3" |
+---------+--------------+-----------+--------------------+
| 3 | 1 | 2 | "Blue Category 1" |
+---------+--------------+-----------+--------------------+
| 3 | 2 | 1 | "Blue Category 2" |
+---------+--------------+-----------+--------------------+
| 3 | 3 | 3 | "Blue Category 3" |
+---------+--------------+-----------+--------------------+
为用户选择分类:
select c.title, uc.custom_title from category c join user_category uc on c.category_id=uc.category_id where uc.user_id= ? order by uc.position
如果uc。custom_title不为空则显示该标题,否则显示c.title。
答
位置故事是我想到的,但当主用户添加新类别时仍然存在问题。子用户没有定位该项目,我不想更新数百行。我现在解决了使用此MySQL的功能,这个位置问题:
IFNULL(subuser_position, default_position) AS position_temp
在DEFAULT_POSITION回落,如果subuser_position是NULL
所以将基本用户的类别永远是一个主要的用户类别的子集,或将两者用户类型包含所有相同的类别,但顺序不同?此外,是否所有基本用户都只与一个主用户相关联? – ggreiner 2012-02-03 00:28:37