[Help] MSSQL Addon

Fr3sh

New Member
Joined
Nov 21, 2010
Messages
7
Reaction score
0
Здравейте, Искам да ви попитам едно малко въпросче и който разбере или има някви познания да дава идей..
Значи имам сайтче на муонлайн в него администраторите имат брояч на времето през което не са влизали, но не е както трябва защото за да работи всичко както трябва трябва да вляза в сайта и да рефрешна страницата поради това че всички проверки през пхп които минават трябва да се рефрешнат за да минат наново и всичко ми отива в дб admins.

и точно от там идва цялата обърквация, че е на отделна таблица и че се създава от сайта а не от самия сервер.
Та ми се искаше да направя една таблица в MSSql копие на MEMB_STAT
самоче да ми се записва connectTM i disconnectTM в секунди (timestamp) + името на херото а не само ацц-то.

Благодаря предварително ;)
 
Пич намерих ти го нужното :)

FROM DATETIME TO UNIX TIMESTAMP:
SELECT DATEDIFF(s, '19700101', GETDATE())

Ето как трябва да ти изглежда например WZ_DISCONNECT_MEMB:
USE [MuOnline]
GO
/****** Object: StoredProcedure [dbo].[WZ_DISCONNECT_MEMB] Script Date: 06/05/2011 21:15:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[WZ_DISCONNECT_MEMB]

@uid varchar(20)
AS
Begin

BEGIN TRANSACTION

SET NOCOUNT ON

IF EXISTS ( SELECT memb___id FROM MEMB_STAT WITH (READUNCOMMITTED)
WHERE memb___id = @uid )
Begin
UPDATE MEMB_STAT
SET DisConnectTM = (getdate()), connectstat = 0 WHERE memb___id = @uid
End
ELSE
Begin
INSERT INTO MEMB_STAT ( memb___id,DisConnectTM,connectstat) valueS (
@uid,
DATEDIFF(s, '19700101', getdate()),
0
)
End


IF(@@Error <> 0 )
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION

SET NOCOUNT OFF
End
 
Last edited:
Мерси за отговора самоче дай малко разяснения кое как и после как ...
Защото аз не съм от разбиращите от MSSQL аз съм Web Developer Просто помагам на 1 фр

(Ацц-то тук е негово)
 
Ами дай си процедурите :)
 
Аз съм човека от по горе...
За кои процедури става въпрос?

Иначе да обясня пак аз искам от таблицата да изкарам кога е логнат и дисконектнат в секунди и след това с пхп мога ще направя от колко време не бил онлайн и т.н...
т.е.
// $timeDis и $timeLog са в timestamp
$time_online = $timeDis - $timeLog;
echo date("H:i", $time_online);

Спъва ме само това че в таблицата MEMB_STAT времето на логин и дисконект е вече представено в година/час/минути .....
То пак има вариант ама предпочитам със timestamp.
И неразбрах онзи код по горе " SELECT DATEDIFF(s, '19700101', GETDATE()) " трябва ли да правя нещо с него и с втория също каде и как?
 
Last edited:
Оффф :x ами ти изобщо видя ли какво съм редактирал кода?!
Поне да беше видял на процедурата къде съм поставил намереното :x
Очервих ти ги за да ги видиш...(горе съм ти дал процедурата WZ_DisCONNECT_MEMB по същия начин трябва да редактираш и WZ_CONNECT_MEMB)
 
Last edited:
Sorry 4e pi6a na latinica no s1m v daskalo ...
Nerazbiram ot MSSql
Nqma6e da ima neqsnosti ako mi be6e kazal kade da go namerq tozi kod 4e da go editna, nali kazah 4e nz kade se namirat tezi ne6ta.
 
Last edited:
Аз всичко ти дадох наготово... и после нищо не съм ти казал. :x
Open MSSQL Manager > MuOnline>Stored Procedures > WZ_DisCONNECT_MEMB
И редактираш по същия начин както съм редактирал WZ_CONNECT_MEMB
А за WZ_CONNECT_MEMB просто пусни това което съм дал горе в Query Analyzer

WZ_DisCONNECT_MEMB => Тази процедура се изпълнява от JoinServer-а когато акаунт извлиза в сървъра.
WZ_CONNECT_MEMB => Тази процедура се изпълнява от JoinServer-а когато акаунт влиза в сървъра.
 
То добре ама пак нестава ето ти на ConnectTM
UPDATE MEMB_STAT
SET ip = @uip , connectstat = 1 , servername = @server , ConnectTM = (DATEDIFF(s, '19700101', (getdate())))
WHERE memb___id = @uid
И на DisconnectTm
UPDATE MEMB_STAT
SET DisConnectTM = (DATEDIFF(s, '19700101', (getdate()))), connectstat = 0 WHERE memb___id = @uid
и малко по надоло за инсърта
INSERT INTO MEMB_STAT ( memb___id,DisConnectTM,connectstat) valueS (
@uid,
(DATEDIFF(s, '19700101', (getdate()))),
0
)
и пак ми изкарва времето както е ето така "06.6.2011 г. 17:28:00" в този вариант.
като сложих на мястото на "(DATEDIFF(s, '19700101', (getdate())))" "0" и ми изкара "01.1.1900 г."
Иначе когато сложа SELECT DATEDIFF(s, '19700101', GETDATE()) в Query Analyzera и ми изкарва секундите ...
 
Даде ли му Execute (или запиши)?
Ако да ми пиши на скайп ще го оправим :)
 
Оправихме го :)
DROP PROCEDURE [dbo].[WZ_DISCONNECT_MEMB]
GO

CREATE PROCEDURE [dbo].[WZ_DISCONNECT_MEMB]

@uid varchar(20)
AS
Begin

BEGIN TRANSACTION

SET NOCOUNT ON

IF EXISTS ( SELECT memb___id FROM MEMB_STAT WITH (READUNCOMMITTED)
WHERE memb___id = @uid )
Begin
UPDATE MEMB_STAT
SET DisConnectTM = DATEDIFF(s, '19700101', (getdate())), connectstat = 0 WHERE memb___id = @uid
End
ELSE
Begin
INSERT INTO MEMB_STAT ( memb___id,DisConnectTM,connectstat) valueS (
@uid,
DATEDIFF(s, '19700101', (getdate())),
0
)
End


IF(@@Error <> 0 )
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION

SET NOCOUNT OFF
End
GO

и

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[MEMB_STAT]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[MEMB_STAT]
GO

CREATE TABLE [dbo].[MEMB_STAT] (
[memb___id] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[ConnectStat] [tinyint] NULL ,
[ServerName] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[IP] [nvarchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,
[ConnectTM] [bigint] NULL ,
[DisConnectTM] [bigint] NULL
) ON [PRIMARY]
GO
 
How about this ?
im trying to make OnlineHours for counting each hour but not work.
Code:
USE [MuOnline]
GO
/****** Object:  StoredProcedure [dbo].[WZ_DISCONNECT_MEMB]    Script Date: 04/11/2012 01:11:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[WZ_DISCONNECT_MEMB]
@memb___id varchar(10)
 AS
Begin    
set nocount on
    Declare  @find_id varchar(10)    
    Declare @ConnectStat tinyint
	declare @OnlineHours int
    Set @ConnectStat = 0     
    Set @find_id = 'NOT'
    select @find_id = S.memb___id from MEMB_STAT S INNER JOIN MEMB_INFO I ON S.memb___id = I.memb___id 
           where I.memb___id = @memb___id
    if( @find_id <> 'NOT' )    
    begin        
        update MEMB_STAT set ConnectStat = @ConnectStat, DisConnectTM = getdate(), OnlineHours = (DATEDIFF(mi,ConnectTM,getdate()))
         where memb___id = @memb___id
    end
end