PDA

View Full Version : [MU] Xin được giúp đỡ về query MU



luutrunhac
09-11-14, 12:00 AM
Đối với các query trong cùng 1 table thì việc xem thông tin hoặc thay đổi các giá trị ta dùng các query như:

- Xem thông tin nhân vật


use MuOnline
select * from character
where name ='ten nhan vat'

- Tăng giảm 10 Reset và Relife cho nhân vật



use MuOnline
update character
set Resets = Resets + 10,Clevel = 400
where name ='ten nhan vat'

use MuOnline
update character
set Relifes = Relifes + 10
where name ='ten nhan vat'

Nhưng mình đang gặp ca khó là tăng reset cho 1 nhóm tài khoản thuộc thế hệ khác.

Ví dụ:
Thế hệ 1 có các tài khoản: AAAA, BBBB, CCCC, DDDD
Thế hệ 2 có các tài khoản: EEEE, FFFF, GGGG, HHHH
Mình muốn tặng reset cho thế hệ 2 gồm các tài khoản: EEEE, FFFF, GGGG, HHHH
Vì là 2 table khác nhau ( character và MEMB_INFO) nên không biết viết query kiểu gì.
Bạn nào biết xin giúp đỡ.
Cảm ơn!

PhamNinh
09-11-14, 01:09 AM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

BladeKnight109
09-11-14, 03:15 AM
Đối với các query trong cùng 1 table thì việc xem thông tin hoặc thay đổi các giá trị ta dùng các query như:

- Xem thông tin nhân vật


use MuOnline
select * from character
where name ='ten nhan vat'

- Tăng giảm 10 Reset và Relife cho nhân vật



use MuOnline
update character
set Resets = Resets + 10,Clevel = 400
where name ='ten nhan vat'

use MuOnline
update character
set Relifes = Relifes + 10
where name ='ten nhan vat'

Nhưng mình đang gặp ca khó là tăng reset cho 1 nhóm tài khoản thuộc thế hệ khác.

Ví dụ:
Thế hệ 1 có các tài khoản: AAAA, BBBB, CCCC, DDDD
Thế hệ 2 có các tài khoản: EEEE, FFFF, GGGG, HHHH
Mình muốn tặng reset cho thế hệ 2 gồm các tài khoản: EEEE, FFFF, GGGG, HHHH
Vì là 2 table khác nhau ( character và MEMB_INFO) nên không biết viết query kiểu gì.
Bạn nào biết xin giúp đỡ.
Cảm ơn!
Tìm hiểu về select kép, select lồng nhau, join trong MSSQL

ví dụ để lấy dữ liệu của 2 bảng khác nhau tôi có thể viết như sau

select * from table1, table2
select * from table1, table2 where table1.id = table2.id
select a.name, a.password, b.location from table1 as a, table2 as b where a.id = b.id
select table1.name, table1.password, table2.location from table1, table2 where table1.id = table2.id

hoặc có thể dùng join. join thì có nhiều loại. cái này bạn tìm hiểu thêm google về các loại join để tùy vào từng trường hợp mà áp dụng cho nó hợp lý
select * from table1 inner join table2 on table1.id = table2.id

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

luutrunhac
09-11-14, 08:22 AM
Tìm hiểu về select kép, select lồng nhau, join trong MSSQL

ví dụ để lấy dữ liệu của 2 bảng khác nhau tôi có thể viết như sau

select * from table1, table2
select * from table1, table2 where table1.id = table2.id
select a.name, a.password, b.location from table1 as a, table2 as b where a.id = b.id
select table1.name, table1.password, table2.location from table1, table2 where table1.id = table2.id

hoặc có thể dùng join. join thì có nhiều loại. cái này bạn tìm hiểu thêm google về các loại join để tùy vào từng trường hợp mà áp dụng cho nó hợp lý
select * from table1 inner join table2 on table1.id = table2.id

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

Hihi cảm ơn bạn nhé, viết ra đc query này mình show đây luôn cho anh em nào cần dùng.

lequangvu
09-11-14, 05:29 PM
Cấu trúc so sánh này đơn giản thôi mà, vì 2 table đều có tên nv và tên tài khoản, làm theo gợi ý của BK là ok hết

luutrunhac
09-11-14, 06:10 PM
Cấu trúc so sánh này đơn giản thôi mà, vì 2 table đều có tên nv và tên tài khoản, làm theo gợi ý của BK là ok hết

Mod nói rất đúng mình thấy rất đơn giản :D

luutrunhac
11-11-14, 07:34 PM
Cái query này dễ quá mà mình viết mãi ko đc. Bạn nào biết giúp mình chút nào. Cảm ơn!

lequangvu
11-11-14, 08:39 PM
:D quá dễ nên viết mới không được đấy bạn ạ, mình có ý này bạn viết ra 1 file php rồi dùng file php đấy mà xử lý, còn query sql thì chắc đợi cao thủ nào đấy viết giúp thôi :))

SoCoLa78.2014
11-11-14, 09:14 PM
Rất đơn giản dùng In



update Character set Reset = Reset + 1000
where accountid in (
select memb___id from memb_info where Thehe=1)

Lưu ý : TheHe bạn thay thế bằng cột thế hệ của bạn => query trên tặng reset tất cả nhân vật có thế hệ bằng 1 ở memb_info lên 1000

The Gamer
11-11-14, 09:53 PM
Chốt :

cáin ày try.vn cho mình

thêm lệnh này với toàn thế hệ khác nhé

... where accountid in (select memb___id from memb_info where thehe = '2')

BladeKnight109
11-11-14, 10:17 PM
Query 1:

UPDATE Table1
SET Table1.Resets = Table1.Resets + 100
FROM Character AS Table1 INNER JOIN MEMB_INFO AS Table2 ON Table1.AccountID = Table2.memb___id
WHERE Table2.TheHe = 2 AND (Table2.memb___id = 'Account1' OR Table2.memb___id = 'Account2' OR Table2.memb___id = 'Account3')

Query2:

UPDATE Table1
SET Table1.Resets = Table1.Resets + 100
FROM Character AS Table1 INNER JOIN MEMB_INFO AS Table2 ON Table1.AccountID = Table2.memb___id
WHERE Table2.TheHe = 2 AND Table2.memb___id IN ('Account1', 'Account2', 'Account3')

test thử nếu lỗi thì chụp hình lỗi lên đây.
vì tôi không có db nên ko test được

hoặc có thể viết 1 procedure để thực hiện chức năng này cũng được
gợi ý:
- đầu tiên lấy ra danh sách các account muốn update
- tiếnh hành chạy query update trên danh sách account vừa lấy được

luutrunhac
11-11-14, 10:18 PM
Với query :

update Character set Resets = Resets + 1000
where accountid in (
select memb___id from memb_info where Thehe=1)

Khi mình run trực tiếp trên Enterprise Manager thì bị query tự nhảy sang thế này:

UPDATE Character
SET Resets = Resets + 1000
WHERE (AccountID IN
(SELECT memb___id
FROM memb_info
WHERE Thehe = 1))

Còn run trên Query Analyzer thì báo lỗi như thế này:

Server: Msg 446, Level 16, State 9, Line 1
Cannot resolve collation conflict for equal to operation.

Hihi chưa thành công bạn ạ.

luutrunhac
11-11-14, 10:23 PM
Query 1:

UPDATE Table1
SET Table1.Resets = Table1.Resets + 100
FROM Character AS Table1 INNER JOIN MEMB_INFO AS Table2 ON Table1.AccountID = Table2.memb___id
WHERE Table2.TheHe = 2 AND (Table2.memb___id = 'Account1' OR Table2.memb___id = 'Account2' OR Table2.memb___id = 'Account3')

Query2:

UPDATE Table1
SET Table1.Resets = Table1.Resets + 100
FROM Character AS Table1 INNER JOIN MEMB_INFO AS Table2 ON Table1.AccountID = Table2.memb___id
WHERE Table2.TheHe = 2 AND Table2.memb___id IN ('Account1', 'Account2', 'Account3')




Cảm ơn bạn, theo mình hiểu thì phải điền từ acc trong thế hệ vào query này, như thế thì không khả thì vì mỗi thế hệ có đến vài nghìn tài khoản.

BladeKnight109
11-11-14, 10:26 PM
Với query :


Khi mình run trực tiếp trên Enterprise Manager thì bị query tự nhảy sang thế này:


Còn run trên Query Analyzer thì báo lỗi như thế này:


Hihi chưa thành công bạn ạ.

bạn inbox id + pass teamview 3 việt hóa cho mình. mình teamview xem

--- Chế độ gộp bài viết ---


Cảm ơn bạn, theo mình hiểu thì phải điền từ acc trong thế hệ vào query này, như thế thì không khả thì vì mỗi thế hệ có đến vài nghìn tài khoản.

ví dụ ở trên tôi đưa ra là cho 1 số tài khoản thuộc 1 thế hệ nào đó.
còn bạn muốn cho toàn thế hệ 2 thì bỏ cái AND .... đằng sau đi. chỉ để Table2.TheHe = 2 thôi

Trích dẫn từ ví dụ của bạn thôi


Ví dụ:
Thế hệ 1 có các tài khoản: AAAA, BBBB, CCCC, DDDD
Thế hệ 2 có các tài khoản: EEEE, FFFF, GGGG, HHHH
Mình muốn tặng reset cho thế hệ 2 gồm các tài khoản: EEEE, FFFF, GGGG, HHHH

luutrunhac
11-11-14, 10:28 PM
bạn inbox id + pass teamview 3 việt hóa cho mình. mình teamview xem

--- Chế độ gộp bài viết ---



ví dụ ở trên tôi đưa ra là cho 1 số tài khoản thuộc 1 thế hệ nào đó.
còn bạn muốn cho toàn thế hệ 2 thì bỏ cái AND .... đằng sau đi. chỉ để Table2.TheHe = 2 thôi

Để mình thử lại đã nhé, vì sv đang chạy với lại toàn hàng nhạy cảm nên việc login vào sv hơi tế nhị 1 chút.

luutrunhac
11-11-14, 10:34 PM
Kết quả thật tệ, để mình setup 1 sv khác bạn xem giúp nhé.

Run trên Query Analyzer thì báo lỗi như thế này:

Server: Msg 446, Level 16, State 9, Line 1
Cannot resolve collation conflict for equal to operation.

BladeKnight109
11-11-14, 10:45 PM
Kết quả thật tệ, để mình setup 1 sv khác bạn xem giúp nhé.

Run trên Query Analyzer thì báo lỗi như thế này:

lấy cái db đang chạy về import ở máy, cần gì phải vào máy c hủ

The Gamer
11-11-14, 10:54 PM
Với query :


Khi mình run trực tiếp trên Enterprise Manager thì bị query tự nhảy sang thế này:


Còn run trên Query Analyzer thì báo lỗi như thế này:


Hihi chưa thành công bạn ạ.

query này sai :) xem lại đi

query thì đúng nhưng cách để dòng sai nên chạy bị sai

luutrunhac
11-11-14, 11:17 PM
bạn inbox id + pass teamview 3 việt hóa cho mình. mình teamview xem[COLOR="Silver"]


Mình inbox bạn rồi nhé .

BladeKnight109
11-11-14, 11:50 PM
đã xong cho bạn.
lỗi trên do 2 trường khác collation nên bị vậy, phải chỉnh về cùng 1 collation

luutrunhac
11-11-14, 11:51 PM
Bà con ai cần dùng thì sử dụng các Query sau:


select top 20 a.AccountID, a.Name, a.Resets, b.thehe from Character as a, MEMB_INFO as b where a.AccountID = b.memb___id and b.thehe = 2
go

//query 1
update character set Resets = Resets + 10
where AccountID in (select memb___id from MEMB_INFO where thehe = 2)

GO
//query 2
UPDATE Table1
SET Table1.Resets = Table1.Resets + 10
FROM Character AS Table1 INNER JOIN MEMB_INFO AS Table2 ON Table1.AccountID = Table2.memb___id
WHERE Table2.thehe = 2
GO

//query 3
update character set Resets = Resets + 10
where AccountID
in (select memb___id from MEMB_INFO where thehe = 2 AND (memb___id = '38148270' OR memb___id = '0924301800'))
GO

//query 4
UPDATE Table1
SET Table1.Resets = Table1.Resets + 10
FROM Character AS Table1 INNER JOIN MEMB_INFO AS Table2 ON Table1.AccountID = Table2.memb___id
WHERE Table2.thehe = 2 AND (Table2.memb___id = '38148270' OR Table2.memb___id = '0924301800')
GO

//query 5
UPDATE Table1
SET Table1.Resets = Table1.Resets + 10
FROM Character AS Table1 INNER JOIN MEMB_INFO AS Table2 ON Table1.AccountID = Table2.memb___id
WHERE (Table2.thehe = 2 AND Table2.memb___id in ('38148270','0924301800'))

GO

//su dung 1 trong 2 quey tren
va phai chinh collate cua truong memb___id (MEMB_INFO) va AccountID (character) giong nhau