2011-06-30 62 views
1

在我有一列需要唯一的情況下,例如。產品:雞蛋,西紅柿,胡椒,辣椒1,辣椒2 和我插入另一個胡椒之前,我需要檢查最後一個整數,並添加1,所以下一個胡椒將'胡椒3' 我將如何做到這一點? 在此先感謝php和mySQL如何在varchar列中獲得最高值

回答

0

我會嘗試這樣的事:

SELECT LEFT(product_name, 6) AS product_name_plain, 
    CAST(RIGHT(product_name, 6) AS UNSIGNED) AS product_number 
    FROM product_table 
    WHERE product_name_plain = "pepper" 
    ORDER BY product_number DESC 
    LIMIT 1 
  • SELECT打散產品名稱進入平原的名字(「胡椒」),以及產品數量的無符號整數版本( 3)。
  • WHERE條款標識辣椒。
  • ORDER BY將對它們進行排序(這應導致最後一個胡椒是第一個結果)
  • LIMIT只會獲取一個結果。
  • 請注意,在這個查詢中,「6」和「胡椒」是硬編碼的,您的代碼必須將它們放入。6是「胡椒」的長度。
+0

難道這不是選擇'peppercorn'和'peppermint'?那麼遞增數字呢? –

+0

@韋斯利好點。爲了解決這個問題,我重新組織了查詢,並更好地進行排序。當然,納克斯的答案更「正確」,但是有很多時候我們不能重新組織模式來做出更恰當的事情。 :) – Steven

5

簡單的方法是有兩列:第一個是標籤,第二個是標識。 將同一列中的各種信息混合在一起並不好。

然後,你可以這樣做:你想要什麼

SELECT MAX(product_id) FROM ... WHERE label = "pepper" 

SELECT CONCAT(label,product_id) FROM ... WHERE id = ... 

回報。

+1

+1並在複合主鍵上使用['AUTO_INCREMENT'](http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html)。 – jensgram

+2

+1:提及將多個信息合併到一個字段中是一個糟糕的想法(tm)。有兩個字段使得每個字段易於使用,並且將它們連接在一起以便在屏幕上使用總是很容易的。 – MatBailie