2016-07-22 99 views
1

我有一個頁面有一個「訂單」列。當我添加一個新項目時,訂單應該是該項目的1 +最大值。但如果我刪除這些值之間的項目,如我有8 9 10,如果我刪除項目與9新項目將有11值,我將有8 10 11.但我想要8 9 10.我怎麼能做到這一點PHP的?我應該創建一個函數嗎?它用於添加最大+ 1的新項目,但如果我刪除不好。 我的代碼:刪除項目的訂單更改php

$queryMaxOrd = mysql_query("select max(ord) from article where user_id=" .$_SESSION['userId']); 
$row = mysql_fetch_row($queryMaxOrd); 
$valueMaxOrd = $row[0] + 1; 
$_SESSION['a'] = $valueMaxOrd; 

和插入查詢....

任何想法?

+0

從你的問題和你的查詢我認爲你添加記錄到你的表。當您選擇MAX值時,您將始終獲得與該用戶連接的最大值。最好想做的是使用更新 –

+0

好吧,但我想,即使當我插入的東西,有價值max + 1 – johnwilliam25

+0

嘗試使用總和代替最大值 –

回答

0

首先要考慮的是刪除mysql_ *並開始使用mysqli_ *或pdo。你的代碼很容易被sql注入。

通過您的代碼結構,您可以將每條訂單作爲新記錄添加到您的表中,因此,當您向一位用戶發送5條訂單時,您的表格將如下所示。

user: Adiiia | order: 5 
user: Adiiia | order: 3 
user: Adiiia | order: 7 
user: Adiiia | order: 2 
user: Adiiia | order: 9 
當你查詢你說的到MySQL數據庫

:讓我我有user: Adiiia記錄的最大數量。結果應該是9

如果你要計算記錄的總和,你應該使用sum

select sum(ord) from article where user_id='".$_SESSION['userId']."' 

結果應該是26

你能做的最好的事情是通過創建一個新表orders_sum

結構應該像這樣。

Total_orders | User 

當用戶有新的訂單,你可以通過添加一個更新表,否則,如果有一個順序刪除,然後刪除減去一個數量級。

就是這樣。

Total_orders | User 
    5  | Adiiia 

當你想更新:

select Total_orders from orders_sum where User='Adiiia' 

查找用戶多少訂單都通過提取表。

$orders = $row['Total_orders']; 
$plus_orders = $row['Total_orders'] + 1; 

update orders_sum set Total_orders='".$plus_orders."' where user='Adiiia' 

當要刪除:

select Total_orders from orders_sum where User='Adiiia' 

查找用戶多少訂單都通過提取表。

$orders = $row['Total_orders']; 
$minus_orders = $row['Total_orders'] - 1; 

update orders_sum set Total_orders='".$minus_orders."' where user='Adiiia' 
0

讓我們說文章表有主鍵article_id然後刪除任何文章的user_id。抓取user_id的所有article_id。然後更新該用戶的所有article_id的訂單。

$queryArticle = mysql_query("select article_id from article where user_id=" .$_SESSION['userId']." order by article_id asc"); 
$allArticle = []; 
while($rowArticle = mysql_fetch_assoc($queryArticle)){ 
    $allArticle[] = $rowArticle['article_id']; 
} 

$query = "UPDATE article SET ord = (CASE order "; 
foreach($allArticle as $order => $article_id) { 
    $query .= " WHEN {$article_id} THEN {$order}"; 
} 
$query .= " END CASE) WHERE article_id IN (" . implode(",", $allArticle) . ")";