MySQL bunun için daha az hacky yolu var mı?

4 Cevap php

Ben bir kullanıcı tarafından eklenen son ürün almak gerekir. Bu ben ile geldi budur

   $query = 'SELECT id
                 FROM products
                 WHERE user_id = ?
                ORDER BY id DESC
                       LIMIT 1';

Id otomatik artış olduğu için should çalışır. Benim için olsa da, bu hacky hissediyor. Bunu yapmak için daha iyi bir yolu var mı?

Ben belirli bir kullanıcı tarafından son ürün gerekir çünkü ben mysql_last_insert_id() ya da bunun gibi bir şey kullanamazsınız.

4 Cevap

Kullanın:

  SELECT MAX(t.id) AS id
    FROM PRODUCTS t
   WHERE t.user_id = ?

MAX belirtilen sütun maksimum değer döndüren, bir toplama fonksiyonudur. Toplama işlevi kullanılmakta olan biri - - Sorgu tek sütun döndürüyor çünkü GROUP BY bendinde belirtilen olması gerekmez. Ama kullanmanın hiçbir zararı yoktur:

  SELECT MAX(t.id) AS id
    FROM PRODUCTS t
   WHERE t.user_id = ?
GROUP BY t.user_id

Ben bu amaç için tabloya DATETIME sütun eklemek istiyorum. Ben şahsen sipariş açısından AUTO_INCREMENT davranışına dayanarak rahat hissetmiyorum. Ayrıca, amacı "yeni satırlar için benzersiz bir kimlik oluşturmak." Için Bunun dışında, gerçekten değeri hakkında bakım gerekir.

Eğer kullanabilirsiniz

SELECT MAX(id) FROM ...

Değil olacağını ne kadar daha iyi emin tho :)

I Agree with Datetime Column option. for e.g. you have column named LastAddedDate Datetime then you can make query like

Select top(1) Products.Id from Products where User_Id=@UserId order by LastAddedDate,Id Desc

ya da başka bir id durumunda da sorgu yazabilirsiniz

Select top(1) Products.Id from Products where User_Id=@UserId order by Id Desc