İşte benim DB yapısı olduğunu:
CREATE TABLE IF NOT EXISTS `UserItems` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`user_id` int(10) unsigned NOT NULL,
`item_id` int(10) unsigned NOT NULL,
`qty` int(11) NOT NULL default '0'
) ;
CREATE TABLE IF NOT EXISTS `UserEquippedItems` (
`user_id` int(10) unsigned NOT NULL,
`user_item_id` bigint(20) unsigned NOT NULL
);
CREATE TABLE IF NOT EXISTS `UserFriendEquippedItems` (
`user_friend_id` int(10) unsigned NOT NULL,
`user_item_id` bigint(20) unsigned NOT NULL
);
UserItems keeps all the item inventory with quantity.
let say if I have 5 item (item id 123456). then the entry will be
(null, $userid, 123456, 5).
the qty is the quantity of all the entity with the same item_id.
Ancak, bazı kullanıcılar öğeyi donatmak olabilir. Bazı yoktur. Onlar donatmak, bu UserEquippedItems tablosunda bir giriş olacaktır.
Ayrıca, kullanıcıların arkadaşlarını da kullanıcının öğeyi donatabilirsiniz.
Örnek Veri:
UserItems:
id, user_id, item_id, qty
( 1, 4567, 123123123, 5)
( 2, 4567, 100010001, 2)
( 3, 4567, 100010099, 1)
UserEquippedItems: (user_item_id is UserItems.id)
user_id, user_item_id
( 4567, 1)
( 4567, 2)
UserFriendEquippedItems
(user_item_id is UserItems.id)
user_friend_id, user_item_id
( 4100, 1)
( 4100, 3)
So, how can I find out the quantity of items that are equipped? and how can I find out the quantity of items that are NOT equipped ?
Side Story: önce, DB, tek bir giriş olarak her UserItems var. örneğin Onlardan 5 varsa item_id = 123123123 için, ben DB 5 girdileri vardır. Ama sonra, bizim DB 4 milyon UserItems kayıtlarına deli gibi büyür. 5 yerine girdileri olan, biz sadece tutmak parça için Adet Adet alanı ile, UserItems tabloda bir girişi var bu yüzden ne kadar toplamda çok. Bu doğru bir yaklaşım olup olmadığını bilmiyorum, ama DB boyutu 75% kısmak olabilir umuyoruz.
Ayrıca, donanımsız öğeleri almak için sorgu oldu:
SELECT Items.id, count(UserItems.id) as numCount
FROM UserItems INNER JOIN
Items ON UserItems.active=1 AND
UserItems.item_id=Items.id AND
Items.active=1 AND
UserItems.user_id=$userId
WHERE NOT EXISTS (
SELECT UserEquippedItems.user_item_id
FROM UserEquippedItems
WHERE UserEquippedItems.user_item_id= UserItems.id
)
AND NOT EXISTS (
SELECT UserFriendsEquippedItems.user_item_id
FROM UserFriendsEquippedItems
WHERE UserFriendsEquippedItems.user_item_id= UserItems.id)
GROUP BY Items.id
Tabii ki, bu sorgu yeni şema ile çalışmıyor. :)