2012-02-03 72 views
1

使用: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 

哪有我使它成爲一個「基本」用戶可以使用位置列創建自己的排序順序。我需要不同的列/表格嗎?不要忘記,數百個用戶可以共享類別,因此當添加新類別作爲主用戶時,我不想更新數百個表格,因此所有「基本」用戶也都在其列表中擁有類別。它應該在飛行中維護位置等。

謝謝您的幫助提前!

+0

所以將基本用戶的類別永遠是一個主要的用戶類別的子集,或將兩者用戶類型包含所有相同的類別,但順序不同?此外,是否所有基本用戶都只與一個主用戶相關聯? – ggreiner 2012-02-03 00:28:37

回答

0

我想你想:

使用位置欄設置一個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 
     } 
如果你想允許不僅僅是位置,爲什麼複製更多的類別表,並用它來存儲的類別表中的個人引用的更多

;延伸位置表以包括所述用戶選擇標題等....

0

表:

用戶:

+-------+----------------------+ 
| 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。

0

位置故事是我想到的,但當主用戶添加新類別時仍然存在問題。子用戶沒有定位該項目,我不想更新數百行。我現在解決了使用此MySQL的功能,這個位置問題:

IFNULL(subuser_position, default_position) AS position_temp 

在DEFAULT_POSITION回落,如果subuser_position是NULL

相關問題