MYSQL: donatılmamış öğelerin qty nasıl öğrenebilirim?

0 Cevap php

İş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. :)

0 Cevap