PDA

Դիտել ողջ տարբերակը : Հարցեր SQL-ից



rostrix
29.11.2007, 15:57
Ժողովուրդ SQL-ում ինչպես են մի զապռոսից հանում մեկ այլ զապռոս

օրինակ՝
select * from(
(select count(col1) from t1)
-
(select count(col2) from t2)
)


սենց մի բան պետք է որ լինի, բայց չի աշխատում, Oracle-ում մի հատ minus-ով հարցը լուծվումա.

david
29.11.2007, 16:32
ստացված պատասխանը պետք է ունենա մականուն.
շարունակի "select * from(
(select count(col1) from t1)
-
(select count(col2) from t2)
) as makanun"

rostrix
29.11.2007, 16:49
ստացված պատասխանը պետք է ունենա մականուն.
շարունակի "select * from(
(select count(col1) from t1)
-
(select count(col2) from t2)
) as makanun"
հեռացրեցի էլի ստացվեց :8

Grieg
29.11.2007, 17:22
կարողա այսպես՞
select (col1-col2) as col from (
(select count(col1) as col1 from t1)
cross join (select count(col2) as col2 from t2)
) as x

Արշակ
29.11.2007, 17:57
select (
(select count(col1) from t1)
-
(select count(col2) from t2)
);

Սենց հաստատ աշխատում է MySQL-ում։ Այսինքն՝ պետք է սկզբի select * from–ի փոխարեն գրես ուղղակի select ։

Կարող ես նաև այսպես գրել.
select (
(select count(col1) from t1)
-
(select count(col2) from t2)
) us col_name;
որպեսզի ստացված արդյունքը նորմալ անուն ունենա։

Հ. Գ.
Թեմայի անունն ինչու՞ ես «T-SQL» դրել։:8
Մոդերատորներին խորհուրդ կտայ թեմայի վերնագիրը դարձնել «Հարցեր SQL-ից»։

rostrix
04.12.2007, 09:43
Ժողովուրդ կարող՞ա իմանաք SQL Server 2005 ում, DTS-ները որտե՞ղ են…

ArmSOAD
14.01.2009, 23:31
SQL-ում լավ փորձ ձեռք բերելու համար առաջարկում եմ օգտվել հետևյալ կայքից, որտեղ կարող եք լիքը խնդիրներ լուծել. www.sql-ex.ru

DavitH
29.11.2009, 22:52
օգնեք dump անեմ բազան

DavitH
30.11.2009, 01:02
արդեն պետք չի:B

Valentina
03.12.2010, 00:16
Կօգնե՞ք միանամ SQL սերվերին, չգիտեմ ոնց անեմ:think

Lusina
09.12.2010, 20:36
Արդեն գիտես Ան;)հիմա մնւմ է իմանանք ոնց անենք որ SQL.ի ծրագիրն անջատելուց բազաներն ավտոմատ անջատվեն.

Valentina
23.03.2011, 18:42
Ժող ո՞վ կարա ասի թե ոնց անեմ որ բազայում գրված հայերենով տվյալները հարցականներ չդառնան:

Valentina
23.03.2011, 19:50
Ժող ո՞վ կարա ասի թե ոնց անեմ որ բազայում գրված հայերենով տվյալները հարցականներ չդառնան:
Լավ արդեն ստացվեց:

Valentina
23.04.2011, 22:41
Ինձ կարող եք ասել թե տողի վերջում ավելորդ պրոբելները ո՞նց են ջնջում: Նենց պրոբլեմա, որ էտ պրոբելների պատճառով երկու իրար հավասար string տողերի համեմատությունը տալիսա սխալ:

soultaker
24.04.2011, 16:29
Ինձ կարող եք ասել թե տողի վերջում ավելորդ պրոբելները ո՞նց են ջնջում: Նենց պրոբլեմա, որ էտ պրոբելների պատճառով երկու իրար հավասար string տողերի համեմատությունը տալիսա սխալ:

TRIM(' abc ') -> 'abc'
RTRIM(' abc ') -> ' abc'
LTRIM(' abc ') -> 'abc '

Valentina
01.05.2011, 14:18
Ժող կօգնե՞ք, երբ ուզում եմ նոր database ավելացնեմ այ սենց սխալա տալիս.
"Разрешение CREATE DATABASE запрещено в базе данных master"

Հ.Գ. SQL -ը նոր եմ ինստալլ արել: Մտածում եմ նաստրոյկեքի մեջ մի բան էն չի:

ArmSOAD
01.05.2011, 18:27
Ժող կօգնե՞ք, երբ ուզում եմ նոր database ավելացնեմ այ սենց սխալա տալիս.
"Разрешение CREATE DATABASE запрещено в базе данных master"

Հ.Գ. SQL -ը նոր եմ ինստալլ արել: Մտածում եմ նաստրոյկեքի մեջ մի բան էն չի:

Ի՞նչ SQL ա: MySQL, MSSQL թե՞ ուրիշ:

Եթե SQL Server է, այ սա կարդա (http://forum.sysadmins.su/index.php?showtopic=27313), կօգնի:

Valentina
01.05.2011, 18:33
Ի՞նչ SQL ա: MySQL, MSSQL թե՞ ուրիշ:

Եթե SQL Server է, այ սա կարդա (http://forum.sysadmins.su/index.php?showtopic=27313), կօգնի:

SQL Server է, էտ նոյւթը կարդացել եմ, բայց էս մասը "запускайте оснастку SQL Server Surface Area Configuration и добавляйте своего пользователя как администратора сервера. չգիտեմ ոնց են անում:
"

matlev
01.05.2011, 21:57
SQL Server է, էտ նոյւթը կարդացել եմ, բայց էս մասը "запускайте оснастку SQL Server Surface Area Configuration и добавляйте своего пользователя как администратора сервера. չգիտեմ ոնց են անում:
"

Ես էլ չգիտեմ, բայց էս չի՞: (http://aartemiou.blogspot.com/2009/01/sql-server-2005-surface-area.html)

soultaker
01.05.2011, 23:31
SQL Server է, էտ նոյւթը կարդացել եմ, բայց էս մասը "запускайте оснастку SQL Server Surface Area Configuration и добавляйте своего пользователя как администратора сервера. չգիտեմ ոնց են անում:
"

Start -> Programs -> Microsoft SQL Server 2005 -> Configuration Tools -> SQL Server Surface Area Configuration

Valentina
01.05.2011, 23:35
Start -> Programs -> Microsoft SQL Server 2005 -> Configuration Tools -> SQL Server Surface Area Configuration

իսկ հետո՞, ի՞նչ եմ էնտեղ փոխում

soultaker
01.05.2011, 23:56
իսկ հետո՞, ի՞նչ եմ էնտեղ փոխում

Հետո կոնկրետ չգիտեմ ինքը ինչ տեսք ունի, պետք գտնել թե որտեղից են թույլատվությունները ղեկավարում ու տվյալ օգտագործողին տալ ադմինի հնարավորություններ կամ ուղղակի ավելացնել որպես ադմին:

Valentina
02.05.2011, 00:03
Հետո կոնկրետ չգիտեմ ինքը ինչ տեսք ունի, պետք գտնել թե որտեղից են թույլատվությունները ղեկավարում ու տվյալ օգտագործողին տալ ադմինի հնարավորություններ կամ ուղղակի ավելացնել որպես ադմին:

Լավ, շնորհակալ եմ ամեն դեպքում, որ փորձեցիք օգնեք:

Varzor
02.05.2011, 15:37
5200152001
իսկ հետո՞, ի՞նչ եմ էնտեղ փոխում

Երկու տարբերակ կա` գործող բազայի համար և բոլոր նոր ստեղծվողների համար
(նկարներով կցված են)

Valentina
02.05.2011, 15:46
5200152001

Երկու տարբերակ կա` գործող բազայի համար և բոլոր նոր ստեղծվողների համար
(նկարներով կցված են)

Սկզբում չկար նաստրոկեքի մեջ add new administator, հետոա ավելացել երբ տվեցի, run as administrator:

Varzor
02.05.2011, 15:57
Դե բնական է :)
MIcrosoft-ի շատ արտադրանք լինում է վերջնականապես կարգաբերել միայն համակարգային ադմինիստրատոր օգտագործողով: Որոշ դեպքերում նույնիսկ ադմինիստրատորի իրավասություններով օժտված օգտագործողւ չի կարողանում կարգաբերումներ կատարել :)

Varzor
02.05.2011, 17:38
Ժողովուրդ մի քիչ բար հարց տամ :))
Ունեմ 2 աղյուսակ, որոնց պարունակությունները ռելացիոն կապված են (տես նկար)
Խնդիրը հետևյալն է.
Ընտրել առաջին աղյուսակից այն տողերը, որոնք բացակայում են 2-րդ աղյուսակում
Ոչ մի կերպ արագագործ հարցում չեմ կարողանում կազմել Firebird-ում
Մի բան գրել եմ, բայց տողերի մեծ քանակի դեպքում (միլիոնից անցնում են 2 աղյուսակներինն էլ)
ահռելի մեծ ժամանակ է ծախսվում, մանավանդ թույլ մեքենայի վրա
Գրածս հետևյան է.
Select * From Table1
Left Join Table2 on (Table1.ID=Table2.TABLE1ID)
Where Table1.ID<>Table2.TABLE1ID

Եթե կան լավ առաջարկներ, խնդրում եմ կիսվեք
կանխավ շնորհակալ եմ

Ներսես_AM
02.05.2011, 17:47
Ժողովուրդ մի քիչ բար հարց տամ :))
Ունեմ 2 աղյուսակ, որոնց պարունակությունները ռելացիոն կապված են (տես նկար)
Խնդիրը հետևյալն է.
Ընտրել առաջին աղյուսակից այն տողերը, որոնք բացակայում են 2-րդ աղյուսակում
Ոչ մի կերպ արագագործ հարցում չեմ կարողանում կազմել Firebird-ում
Մի բան գրել եմ, բայց տողերի մեծ քանակի դեպքում (միլիոնից անցնում են 2 աղյուսակներինն էլ)
ահռելի մեծ ժամանակ է ծախսվում, մանավանդ թույլ մեքենայի վրա
Գրածս հետևյան է.
Select * From Table1
Left Join Table2 on (Table1.ID=Table2.TABLE1ID)
Where Table1.ID<>Table2.TABLE1ID

Եթե կան լավ առաջարկներ, խնդրում եմ կիսվեք
կանխավ շնորհակալ եմ

էս հարցումդ նույնն ա ինչ

Select * From Table1
Left Join Table2 on (Table1.ID=Table2.TABLE1ID)


սովորական join-ի դեպքում այն տողերը որոնք երկրորդ աղյուսակում չկան չեն վերադարձվում,
Բացի դա հարցումդ շատ անգամ կարագանա, եթե Table2.TABLE1ID-ի վրա ինդեքս դնես:

Varzor
02.05.2011, 19:25
էս հարցումդ նույնն ա ինչ

Select * From Table1
Left Join Table2 on (Table1.ID=Table2.TABLE1ID)


սովորական join-ի դեպքում այն տողերը որոնք երկրորդ աղյուսակում չկան չեն վերադարձվում,
Բացի դա հարցումդ շատ անգամ կարագանա, եթե Table2.TABLE1ID-ի վրա ինդեքս դնես:

:)) չէ նույնը չի, :))
left outer join-ի դեպքում ձախից միացնում ա, բոլոր տողերը, անկախ նրանից, կան թե չկան:
Օրինակ
T1.ID T1.TEXT T2.ID T2.T1ID T2.TEXT
1 a 1 1 aa
1 a 2 1 ab
2 b
3 c 3 3 ca
3 c 4 3 cb
4 d

սովորական Join-ի (INNER JOIN) ստացվում է հետևյալը`

T1.ID T1.TEXT T2.ID T2.T1ID T2.TEXT
1 a 1 1 aa
1 a 2 1 ab
3 c 3 3 ca
3 c 4 3 cb

Ինդեքսները դրված են բոլոր բանալի հանդիսացող սյուների, ինչպես նաև "ծնող" բանալի սյուների վրա

Oracl-ում կա սենց տարբերակ`
Select * From Table1
Left Join Table2 on (Table1.ID EXPECT Table2.TABLE1ID)
Եթե չեմ սխալվում (սինտաքսիսը չեմ վերանայել, արագ գրեցի, վաղուց Oracl-ով չեմ զբաղվում),
նույնը արդեն կա նաև SQL Server 2008-ում,
Բայց Firebird/Interbase-ում չկա
Կարելի է գրել նաև այսպես`
Select * From Table1
Where Table1.ID NOT IN (SELECT Table2TABLE1ID From Table2)

Սակայն հարցման կատարման պլանի կառուցման և հարցման կատարման մաթեմատիկական և պրոցեսորային հաշվարկների տեսանկյունից նույնն է տալիս
հարցը այն է, որ վերադարձվեն այն տողերը, որոնք 2-ՐԴ ԱՂՅՈՒՍԱԿՈՒՄ ՉԿԱՆ` ենթատող չունեն:
T1.ID T1.TEXT T2.ID T2.T1ID T2.TEXT
2 b
4 d

Ներսես_AM
02.05.2011, 22:42
:)) չէ նույնը չի, :))

Հա ճիշտ ա նույնը չի լավ չէի նկատել որ <> ես դրել պայմանի մեջ. մտածել էի = ես դրել: Բայց էս քո գրածով ընդհանրապես ոչ մի տող չի գա :'

Select * From Table1
Left Join Table2 on (Table1.ID=Table2.TABLE1ID)
Where Table1.ID<>Table2.TABLE1ID

որովհետև մի հատ գրել ես «on (Table1.ID=Table2.TABLE1ID)» հետո էլ գրել ես «Where Table1.ID<>Table2.TABLE1ID», որ էտ նույն տողերը իրար հավասար չլինեն :'
Եթե outer join արած լինեիր էտ դեպքում քո ասածը կվերադարձներ:

իմ կարծիքով ամենաարագը պիտի որ սա լինի


SELECT Table1.*
FROM Table1 LEFT OUTER JOIN Table2
ON (Table1.ID=Table2.TABLE1ID)
WHERE Table2.ID IS NULL


Join սենց թե նենց պիտի անես դրանից չես փախնի, իսկ where-ն էլ սրանից օպտիմալ ինձ թվում ա դժվար ա գրել: Բայց եթե մի ուրիշ խելքին մոտ բան մոգոնես ասա:
Հա էտ where-ի սյունյակը պիտի նենց սյունյակ վերցնես որ null չի լինում օրինակ primary key-ն: Վերադարձվող ինֆոյի ծավալն էլ ինչքան կարող ես փոքրացրու, կոնկրետ ես վերցրել եմ առաջին աղյուսակի սյուները: Մեծ միլիոնանոց ռեզալսեթերի դեպքում էական տարբերություն ա տալիս:

Varzor
03.05.2011, 17:07
որովհետև մի հատ գրել ես «on (Table1.ID=Table2.TABLE1ID)» հետո էլ գրել ես «Where Table1.ID<>Table2.TABLE1ID», որ էտ նույն տողերը իրար հավասար չլինեն :'
Եթե outer join արած լինեիր էտ դեպքում քո ասածը կվերադարձներ:

:)
Շնորհակալություն արձագանքի համար:
Իրականում Left [Outer] Join ...
Outer-ը կարելի ա, բաց թողել :) Where-ը աշխատում է ամենավերջում` join-ը կատարելուց հետո:

Table2.ID IS NULL տարբերակն իրոք որ համարժեք է` թե արդյունքի, թե Engine-ի կողմից կատարվող գործողությունների տեսանկյունից (նույնիսկ որոշ Engine-ների կողմից ավելի արագ է կատարվում` կախված NULL երի հետ աշխատելու սկզբունքից):
2 աղյուսակում ID-ները առաջնային բանալի են (նկարում կա) և ինդեքսավորված:
Վերադարձվող ինֆորմացիայի քանակը, կախված RAM-ից, իհարկե կապ ունի, ինձ ամբողջն ա պետք, դրա համար եմ տենց գրել:
Գոյություն ունի նաև ոչ ակնհայտ համակցման տարբերակ` առանց Join-ի, սակայն խոսքը գնում է, հենց այս տարբերակի մասին:

Մի խոսքով, ոնց հասկացա Firebird-ի մասին չեք ասում ավելին, քան կա:

Համենայն դեպս, իրոք շնորհակալ եմ

Ներսես_AM
03.05.2011, 17:27
Varzor, Firebird-ից տեղյակ չեմ, mysql-ով եմ ասում, էնտեղ եթե OUTER չես գրում default-ով INNER ա լինում:

Ուրիշ բան չեմ կարող ասել, բայց եթե մի խելոք բան գտնես ստեղ գրի մենք էլ իմանանք :)

Varzor
03.05.2011, 18:26
Հա բա իհարկե :)
Բա էլ ինչի համար են ֆորումները? միայն վերցնելու? կարելի է նաև ներդնել :)

Մի հարց MySQL-ւմ սենց բաներ կան?

Select ... from
LEFT INNER JOIN
և
Select ... from
LEFT OUTER JOIN

Որն է տարբերությունը??

Ներսես_AM
03.05.2011, 19:15
Հա բա իհարկե :)
Բա էլ ինչի համար են ֆորումները? միայն վերցնելու? կարելի է նաև ներդնել :)

Մի հարց MySQL-ւմ սենց բաներ կան?

Select ... from
LEFT INNER JOIN
և
Select ... from
LEFT OUTER JOIN

Որն է տարբերությունը??

հա ոնց չկա, տարբերությունն էլ հենց էն էր որ, OUTER-ի դեպքում երկրորդ աղյուսակի տողերը գալիս են NULL-երով եթե այդ տողը գոյություն չունի,
կարճ ասած ստեղ լավ նկարագրել ես :)) http://www.akumb.am/showthread.php/16849-%D5%80%D5%A1%D6%80%D6%81%D5%A5%D6%80-SQL-%D5%AB%D6%81?p=2228554&viewfull=1#post2228554

ու mysql-ում երբ գրում ես A JOIN B դեֆոլթով հասկանում ա LEFT INNER JOIN, եթե OUTER ես ուզում պիտի արդեն գրես OUTER: OUTER JOIN միայն գրելուց էլի LEFT ա հասկանում, կարող ես RIGHT գրես:

Varzor
03.05.2011, 19:30
Firebird-ում 7 SQL Server-ում [Left] [Right] INNER JOIN` այսինքն կարելի է բաց թողնել` ստացվում է սովորական միավորում` ըստ պայմանի:
Այ սենց տարբերություններ կան, դրա համար էլ, եթե մի բանով աշխատում ես, հետո անցնում մյուսին երբեմն օրերով չարչարվու ես մի հատ բարդ հարցումը "թարգմանելու" համար :)

Universe
21.09.2011, 00:05
Կներեք էս տոն օրով որ սենց հարցեմ տալի,ամեն դեպքում գործիս հետա կապված:))
ՈՒրեմն նման միխնդիր ախպեր ջան՞

Միկայք եմ տեղափոխում ՀԻՆԱՎՈՒՐՑ մի համակարգից նոր իմ գնած դվիժոկի վրա:
Քանի որ հին տվյալների բազան բավականին լիքն էր այցելուների տվյալներով, որոշեցի տեղափոխել բոլոր յուզեռներին առանց բացառության ինչ գնով էլ լինի:
Տեղափոխեցի, մի քանի մոդիֆիկացում տեյբլներում ու etc... ներում և 1-ից 1 ստացվեց:

Այժմ, կանգնած եմ ի այսպիսի անպատկառ, անախորժ ու անկապ խնդրի առջև: Նախկինում յուզեռների password-ները պահվում էին տվյալների բազայու սովորական TEXT ի սկզբունքով, իսկ հիմա՝, նոր համակարգում, գաղտնաբառերը պահվում են MD5 տարբերակով:

Ուրեմն այսպիսի հարց.
Որպեսզի, բոլոր 5.000 ից ավել յուզեռներին ՁԵՌՔՈվ չմտնեմ ու TYPE ը փոխեմ բոլորինը MD5 hash ի վրա, ապա ինչպե՞ս կարող եմ դա անել հրամանով, կամ ավտոմատ, որպեսզի բոլորում միանգամից դրանք ուղղվեն:

Նախապես շնորհակալ եմ:

AMzone
21.09.2011, 00:08
Կներեք էս տոն օրով որ սենց հարցեմ տալի,ամեն դեպքում գործիս հետա կապված:))
ՈՒրեմն նման միխնդիր ախպեր ջան՞

Միկայք եմ տեղափոխում ՀԻՆԱՎՈՒՐՑ մի համակարգից նոր իմ գնած դվիժոկի վրա:
Քանի որ հին տվյալների բազան բավականին լիքն էր այցելուների տվյալներով, որոշեցի տեղափոխել բոլոր յուզեռներին առանց բացառության ինչ գնով էլ լինի:
Տեղափոխեցի, մի քանի մոդիֆիկացում տեյբլներում ու etc... ներում և 1-ից 1 ստացվեց:

Այժմ, կանգնած եմ ի այսպիսի անպատկառ, անախորժ ու անկապ խնդրի առջև: Նախկինում յուզեռների password-ները պահվում էին տվյալների բազայու սովորական TEXT ի սկզբունքով, իսկ հիմա՝, նոր համակարգում, գաղտնաբառերը պահվում են MD5 տարբերակով:

Ուրեմն այսպիսի հարց.
Որպեսզի, բոլոր 5.000 ից ավել յուզեռներին ՁԵՌՔՈվ չմտնեմ ու TYPE ը փոխեմ բոլորինը MD5 hash ի վրա, ապա ինչպե՞ս կարող եմ դա անել հրամանով, կամ ավտոմատ, որպեսզի բոլորում միանգամից դրանք ուղղվեն:

Նախապես շնորհակալ եմ:

բազան չի կարող text -ը md5 սարքել, բազան տեղ է, որտեղ ինֆորմացիոան գրում էս, ուստի պետք է ինչոր ծրագրի միջոցով դա կատարես:

Universe
21.09.2011, 00:15
բազան չի կարող text -ը md5 սարքել, բազան տեղ է, որտեղ ինֆորմացիոան գրում էս, ուստի պետք է ինչոր ծրագրի միջոցով դա կատարես:
Ո՞նց չի կարող:) Բա ո՞նց եմ ես անում: ՈՒղղակի ռուչնոյ տարբերակով եմ անում...:think

Varzor
21.09.2011, 00:23
Ո՞նց չի կարող:) Բա ո՞նց եմ ես անում: ՈՒղղակի ռուչնոյ տարբերակով եմ անում...:think
2 հարց
1. Ինչ տվյալների բազա է? (չնայած կռահում եմ, որ MySQL Է ;) )
2. Ինչ գործիքով ես բազայի հետ աշխատում` ոնց ես հատ-հգատ MD5 անում?

Universe
21.09.2011, 00:27
2 հարց
1. Ինչ տվյալների բազա է? (չնայած կռահում եմ, որ MySQL Է ;) )
2. Ինչ գործիքով ես բազայի հետ աշխատում` ոնց ես հատ-հգատ MD5 անում?
1. Mysql
2.
52979

52980

52981

52982

Varzor
21.09.2011, 00:58
1. Դե PHPMyAdmin-ը միանգամից անում ա: Աղյուսակի կառուցվածքի մեջ տվյալ սյան տվյալների պահպանման տիպը դնում ես MD5, ու ինքը ավտոմատ չի փոխում?
2. Մել էլ կարող ես մի հատ Update հարցում գրել ու կփոխի:
3. Մի հատ միջանկյալ աղյուսակ սարքես, որից հետո տվյալները լցնես քո ուզած աղյուսակի մեջ, որտտեղ արդեն գաղտնաբառի սյունակի պահպանման տիպտ ՄԴ5 է: Ինը ավտոմատ կերպով կդարձնի MD5 ու կպահի:
4. PHP կոդ գրես` ցիկլով հատ-հատ կարդաս, MD5 նես ու գրես քո ուզած աղյուսակի մեջ կամ նույն աղյուսակում Update անես:

Universe
21.09.2011, 09:20
1. Դե PHPMyAdmin-ը միանգամից անում ա: Աղյուսակի կառուցվածքի մեջ տվյալ սյան տվյալների պահպանման տիպը դնում ես MD5, ու ինքը ավտոմատ չի փոխում?
2. Մել էլ կարող ես մի հատ Update հարցում գրել ու կփոխի:
3. Մի հատ միջանկյալ աղյուսակ սարքես, որից հետո տվյալները լցնես քո ուզած աղյուսակի մեջ, որտտեղ արդեն գաղտնաբառի սյունակի պահպանման տիպտ ՄԴ5 է: Ինը ավտոմատ կերպով կդարձնի MD5 ու կպահի:
4. PHP կոդ գրես` ցիկլով հատ-հատ կարդաս, MD5 նես ու գրես քո ուզած աղյուսակի մեջ կամ նույն աղյուսակում Update անես:

Ափդեյթ հարցմամբ ես բայց կարող ե"մ ՆՈՒԼԼԴ-ը փոխեմ ՆՈՆԵ-ով:
Ամեն դեպքում շնորհակալ եմ, հիմա մի քանի տարբերակ կփորձեմ...

Universe
21.09.2011, 11:50
Վերջը այսպես եմ անում:
Վերցնում եմ տեյբլը, ընդհանուր նշում ու 100 - 100 էդիթ եմ անում:
Արդյունքում ամեն մի հատ ձեռքով առանձին-անհատական էդիթի դիմաց մոտ 10 վայրկյան գործս արագացնում եմ...
Արդեն , այսինքն էս գրառումից առաջ 10 րոպեում մոտավորապես 800-900 յուզեռի գաղտնաբառ եմ ՄԴ5 դարձրել:
Իսկ եթե էս ժամանակը ծախսեի մենակ էտ սկրիպտի գրելու վրա, ապա մոտ 5 անգամ ավելի շատ ժամանակ կծախսեի կարծում եմ, մինչև տեստ անեի, և այլն և այլն...
Հիմա, քանի որ ինձ շուտա պետք կատարել այդ գործողությունը, ստիպված էս մեթոդով եմ անում.....

Ներսես_AM
22.09.2011, 02:32
UPDATE `table` SET `password`=MD5(`password`);

table = աղյուսակիդ անունը
password = գաղտնաբառիդ սյունյակը

Varzor
22.09.2011, 02:37
UPDATE `table` SET `password`=MD5(`password`);
table = աղյուսակիդ անունը
password = գաղտնաբառիդ սյունյակը

Հենց էդ էլ ասում էի` Պարզագույն կառուցվածքի հարցում է:
Մի քանի արագ տարբերակներ եմ ասել` նայած, թե որ մակարդակի վրա է տիրապետում տվյալենրի բազաների հետ աշխատելուն:
Բայց դե ձեռքի աշխատանքը ավելի է գնահատվում :D

Universe
22.09.2011, 08:28
Հենց էդ էլ ասում էի` Պարզագույն կառուցվածքի հարցում է:
Մի քանի արագ տարբերակներ եմ ասել` նայած, թե որ մակարդակի վրա է տիրապետում տվյալենրի բազաների հետ աշխատելուն:
Բայց դե ձեռքի աշխատանքը ավելի է գնահատվում :D
Ձեռքինը ո՞րնա, ամեն մի 50-թեյբլից հետո էլ հատ-հատ ստուգում էի, ճիշտա՞ թե չէ:
Լավ, 2000 ներ մնացել, շնորհակալություն Ներսեսին:
Վարձոր ջան, բա որ գիտեիր ասեիր էլի :) ես էլ թեյբլների մեջ որ մտնում եմ հետները չեմ խեղճանում, բայց ԴԲ հարցումներից ահավոր ճնշվում եմ էլի :))

Varzor
22.09.2011, 09:26
Ձեռքինը ո՞րնա, ամեն մի 50-թեյբլից հետո էլ հատ-հատ ստուգում էի, ճիշտա՞ թե չէ:
Լավ, 2000 ներ մնացել, շնորհակալություն Ներսեսին:
Վարձոր ջան, բա որ գիտեիր ասեիր էլի :) ես էլ թեյբլների մեջ որ մտնում եմ հետները չեմ խեղճանում, բայց ԴԲ հարցումներից ահավոր ճնշվում եմ էլի :))
Է դու չէիր հարցրել, թե կոնկրետ ինչ սինտաքսիս պիտի ունենա հարցումը, ուղղակի հարցրել էիր, թե ինչպես կարելի է անել, ես էլ տարբերակներն էի նշաել :))
Ես ինչ իմանամ, որ բազաների հետ մենակ գրաֆիկական ինտերֆեյսով ես կարողանում լավ աշխատել? Մանավանդ MyAdimin-ի գործիքներն էդքան էլ շատ չեն համեմատած այլ ծրագրերի հետ:
Կարևորը, որ արել ես :)

Universe
26.10.2011, 23:22
Մի հատել SQL ից հարց:)) Դե թե կարող եք պատասխանեք:) Շնորհակալ ե նախապես բարի մարդիկ :oy

Ինչպե՞ս xxxxx դատաբազայում գտնվող photo_album - թեյբլի name քոլամնի մեջ պարունակվող ինչքան «????? ?? ????» այս արտահայտությունը պարունակող բառ կա բոլորը փոխարինեմ մեկ այլով:

Հուսով եմ հարցս բարդ էր, իսկ պատասխանն էլ՝ հասկանալի չէ... հակառակը, հարցս հասկանալի է, բատասխանն էլ՝ բարդ չէ:

Ներսես_AM
27.10.2011, 00:25
Չհասկացա։ Օրինակ բեր մի հատ։

Universe
27.10.2011, 09:24
Չհասկացա։ Օրինակ բեր մի հատ։
Օրինակ photo_album - թեյբլի name քոլամների մեջ պարունակվող ինչքան «????? ?? ????» /իմեննո հարցականներով ու էս հերթականությամբ/ պատունակվող մաս կա բոլորը փոխեմ:

Դատաբազան փոխել եմ, սակայն էնքոդինգի խնդիրա եղել, ու որոշ ՅՈՒՏՖ-8 բառեր մնացել են հարցականների տակ

soultaker
27.10.2011, 09:46
Օրինակ photo_album - թեյբլի name քոլամների մեջ պարունակվող ինչքան «????? ?? ????» /իմեննո հարցականներով ու էս հերթականությամբ/ պատունակվող մաս կա բոլորը փոխեմ:

Դատաբազան փոխել եմ, սակայն էնքոդինգի խնդիրա եղել, ու որոշ ՅՈՒՏՖ-8 բառեր մնացել են հարցականների տակ

Սենց պիտի որ աշխատի:
UPDATE photo_album SET name = REPLACE(name, '????? ?? ????', 'replacement');

Universe
27.10.2011, 10:22
Սենց պիտի որ աշխատի:
UPDATE photo_album SET name = REPLACE(name, '????? ?? ????', 'replacement');

Table 'սատաբազա.photo_album' doesn't exist

Varzor
27.10.2011, 16:42
Table 'սատաբազա.photo_album' doesn't exist
Դասական Update հարցում ա,

UPDATE photo_album SET NAME = 'replacement srting' WHERE NAME = ''????? ?? ????''
ինչ գործիքով ես աշխատացնում? Որտեղից ես աշխատացնում հարցումը?

Universe
27.10.2011, 18:11
Դասական Update հարցում ա,

ինչ գործիքով ես աշխատացնում? Որտեղից ես աշխատացնում հարցումը?

Դասական էռռոռ :think You have an error in your SQL syntax


UPDATE photo_album SET NAME = 'Անձնական էջի նկարներ' WHERE NAME = ''????? ?? ????''

Varzor
27.10.2011, 18:34
Դասական էռռոռ :think You have an error in your SQL syntax
:D
Կրկնակի չակերտները հանի ;) տեղի մի հատանոց դիր:
PHPMyAdmin-ով ես անում?

Universe
27.10.2011, 18:58
:D
Կրկնակի չակերտները հանի ;) տեղի մի հատանոց դիր:

Կրկին դասական.

#1146 - Table 'դատաբազայի_անուն.photo_album' doesn't exist


PHPMyAdmin-ով ես անում?
աՅո

soultaker
27.10.2011, 19:28
Table 'սատաբազա.photo_album' doesn't exist

Ստեղ շատ պարզ ասվածա ինչումնա սխալը, լավ կլինի հարցումը գրելուց ուղղակի նայես ինչ ես գրում, որ թե միայն copy-paste անես: Դժվար չի ստուգել էտ անունով table կա թե չէ:

Universe
27.10.2011, 19:37
Ստեղ շատ պարզ ասվածա ինչումնա սխալը, լավ կլինի հարցումը գրելուց ուղղակի նայես ինչ ես գրում, որ թե միայն copy-paste անես: Դժվար չի ստուգել էտ անունով table կա թե չէ:
Էտ նկատել ուղղել եմ, հարցը դժվար ու չդժվարը չեր, հիմա հարցը նրանումա որ ոնց անում եմ ասումա՝ Затронуто строк: 0, բայց դե հաստատ էտ տողարում մի քանի հարյուր հատ նման սիմվոլների շարք կա հենց նույն հերթականությամբ::think

soultaker
27.10.2011, 19:43
Էտ նկատել ուղղել եմ, հարցը դժվար ու չդժվարը չեր, հիմա հարցը նրանումա որ ոնց անում եմ ասումա՝ Затронуто строк: 0, բայց դե հաստատ էտ տողարում մի քանի հարյուր հատ նման սիմվոլների շարք կա հենց նույն հերթականությամբ::think

Իսկ կոնկրետ ի՞նչ հարցում ես գրել:
Իմիջիայլոց, քո ասած ձևով դժվար աշխատի, որովհետև ամեն հարցական երևացող բան չի, որ ունի հարցականի ASCII կոդը: Ու քո database-ում եղած հարցականները ամենայն հավանականությամբ հայերեն տեքստա եղել: Որպես լուծում կարամ առաջարկեմ PHP-ով, կամ ուրիշ մի բանով, որով դիմում ես database-ին, կարդաս հերթով սաղ տողերը ու մշակես:

Universe
27.10.2011, 20:31
Իսկ կոնկրետ ի՞նչ հարցում ես գրել:
Իմիջիայլոց, քո ասած ձևով դժվար աշխատի, որովհետև ամեն հարցական երևացող բան չի, որ ունի հարցականի ASCII կոդը: Ու քո database-ում եղած հարցականները ամենայն հավանականությամբ հայերեն տեքստա եղել: Որպես լուծում կարամ առաջարկեմ PHP-ով, կամ ուրիշ մի բանով, որով դիմում ես database-ին, կարդաս հերթով սաղ տողերը ու մշակես:
Հա, ես մտածում էի կարճ ու կոնկրետ, միանգամից սքլ ով հնարավոր կլիներ անել, էն էլ չի ստացվում...

Varzor
27.10.2011, 23:52
Հա, ես մտածում էի կարճ ու կոնկրետ, միանգամից սքլ ով հնարավոր կլիներ անել, էն էլ չի ստացվում...
SQL-ով հնարավոր ա գրել պրոցեդուրա, որը կստուգի արդյոք տվյալ դաշտում միայն լատինական սիմվոլներ ու թվեր են (127-ից ցածր սիմվոլներ), թե չէ:
Ավելի հեշտ կլինի, որ PHP-ով մի ցիկլ գրես, որում հատ-հատ տվյալ դաշտի սիմվոլների վրայով կանցնես, կստուգես ու եթե 127-ից բարձր են, ապա փոփոխիր ըստ ցանկության:
Աշխատատարության տեսանկյունից նույնը կլինի, ինչոր SQL կոդով պրոցեդուրան գրես, հետո այդ պրոցեդուրան կանչես հարցման մեջ:
Իսկ եթե աղյուսակի էնքոդինգը նորից հետ ես փոխում, այդ սիմվոլները երևում են? Եթե երևում են, ապա էնքոդինգը փոխած ռեժիմում աշխատացրու հարցումդ, ուղղակի հարցականների փոխարեն նորմալ տեքստը գրի:

Ներսես_AM
28.10.2011, 00:27
Մի հատ սենց SELECT քշի տես տող վերադարձնու՞մ ա:
SELECT name FROM photo_album WHERE NAME LIKE '%????? ?? ????%';

Universe
28.10.2011, 09:34
Իսկ եթե աղյուսակի էնքոդինգը նորից հետ ես փոխում, այդ սիմվոլները երևում են? Եթե երևում են, ապա էնքոդինգը փոխած ռեժիմում աշխատացրու հարցումդ, ուղղակի հարցականների փոխարեն նորմալ տեքստը գրի:
Հա, փոխել եմ Վարձոր ջան, նշված երկու ձևերով էլ փորձել եմ ու միևնույն է, սիմվոլներ են երևում:

Universe
28.10.2011, 09:35
Մի հատ սենց SELECT քշի տես տող վերադարձնու՞մ ա:
SELECT name FROM photo_album WHERE NAME LIKE '%????? ?? ????%';
Showing rows 0 - 0 ... չի բերում պահանջվողները, բայց, կրկին հիշեցնեմ, որ ????? ?? ???? հերթականությամբ հարցականների շարք այդ աղյուսակի նեյմ քոլըմնում հարյուրավոր քանակությամբ գոյ. ունեն

Varzor
28.10.2011, 09:45
Հա, փոխել եմ Վարձոր ջան, նշված երկու ձևերով էլ փորձել եմ ու միևնույն է, սիմվոլներ են երևում:
Ճիշտ ասած չհասկացա` փոխել ես նորմալ տառեր ես տեսել, թե էլի հարցականներ են երևում?
Ամեն դեպքում ավելի հեշտ կլինի PHP-ով այդ հարցը լուծել:
Հեսա մոտս մի ահտ վիրտուալ մեքենայի վրա PHP MyAdmin-ը դնեմ, տեսնեմ ժամանակ կունենամ մի հատ procedure սրքեմ, որ հատ-հատ այդ սիմվոլները փոփոխի:

Հա, հին բազան պահել ես, թե միանգամից գործողի վրա ես փոխել էնքոդինգը?

Universe
28.10.2011, 10:05
Ճիշտ ասած չհասկացա` փոխել ես նորմալ տառեր ես տեսել, թե էլի հարցականներ են երևում?
Ամեն դեպքում ավելի հեշտ կլինի PHP-ով այդ հարցը լուծել:
Հեսա մոտս մի ահտ վիրտուալ մեքենայի վրա PHP MyAdmin-ը դնեմ, տեսնեմ ժամանակ կունենամ մի հատ procedure սրքեմ, որ հատ-հատ այդ սիմվոլները փոփոխի:

Հա, հին բազան պահել ես, թե միանգամից գործողի վրա ես փոխել էնքոդինգը?
Վարձոր ջան անկաշկանդ շնորհակալ եմ ամեն դեպքում քո օգնության համար: Չէ, դրա կարիքը չկա ոչինչ, ինքս մի քիչ էլ կբզբզեմ, ու մի բան համոզված եմ կստացվի:
իսկ դատաբազան ստեղծել եմ սկզբից ԱՆՍԻ-կադիրովկայով, որից հետո մյուս կայքից, որը պետք է տեղափոխեի նոր համակարգ, դատաբազաի համապատասխան թեյբլներն ու ռովերը անվանափոխելուց հետո տեղադրել եմ նորի մեջ, ու ամեն ինչ նորմալ ստացվել է, նման կերպով տեղափոխել եմ ավելի քան 150 թեյբլ ու տասնյակ հազարավոր տողեր, մոտավորապես 1-2 ժամում: Տեղյակ ես, որ ՍՔԼ ից խեղճանում եմ, բայց դե ոչինչ, ինքս մի քիչ կփորփրեմ, արդեն նավոդկան ինչքան պետքա տվել եք:) Էլ նեղություն քաշել պետք չի:)


Հա, հին բազան պահել ես, թե միանգամից գործողի վրա ես փոխել էնքոդինգը?
Հին բազան տեղափոխել եմ ինչպես նշեցի ու նորում, նախապես էտ նույն թեյբլները յուտֆ-8-գենեռալ էնքոդինգով, բայց, միևնույն է, տեղափոխումից հետո նորմալ տառերը վերափոխվում դառնում են հարցականներ: Դրան այդքան էլ կարևոր բաներ չեին, կան ավելի առաջնային խնդիրներ որոնցով էլ որ հիմա զբաղվում եմ, ուղղակի ոնց որ ասեցի, մտադիր էի ՍՔԼ ով միանգամից էտ հարցը լուծել... Բայց դե ինչ արած...

Ամեն դեպքում անչափահար շնորհակալ եմ օգնության համար:

Varzor
28.10.2011, 10:19
Խնդրեմ :)
Էդ MySQL-ի էնքոդինգները ոնց չեմ սիրչում... Մանավանդ, որ դրանք խիստ կախված են նրանից, թե DB տիպն ինչ ես ընտրում: Որոշ տիպեր ընդհանրապես նորմալ չեն աշխատում յունիկոդի հետ:

BeatleMan
31.10.2011, 20:04
Իմ մոտ էլա դրա նման պռոբլեմ: Բազայից հայերենի տեղը հարցականներա բերում, encoding-ը դրածա utf8_general_ci: Կարող ա ուրիշը պետքա դնեմ??

Varzor
01.11.2011, 09:50
Իմ մոտ էլա դրա նման պռոբլեմ: Բազայից հայերենի տեղը հարցականներա բերում, encoding-ը դրածա utf8_general_ci: Կարող ա ուրիշը պետքա դնեմ??
Հա, դիր հենց UTF8, բացի դրանից կապ ունի նաև բազայի տիպը (Engine)

BeatleMan
01.11.2011, 11:06
իմ մոտ դրած ա innoDB փոխեմ? մեկել հենց Utf-8 չկա հարուր հատ բանա ամենվերջում utf-8_unicode_ci, էդ էր ամենատրամաբանականը դրանով էլ չի լինում

Varzor
01.11.2011, 11:54
իմ մոտ դրած ա innoDB փոխեմ? մեկել հենց Utf-8 չկա հարուր հատ բանա ամենվերջում utf-8_unicode_ci, էդ էր ամենատրամաբանականը դրանով էլ չի լինում
Ինչ գոծիքով ես աշխատում? PHPMyAdmin?

BeatleMan
01.11.2011, 12:00
Ինչ գոծիքով ես աշխատում? PHPMyAdmin?

ըհը: Լավ չեմ անում չե? :pardon

Varzor
01.11.2011, 12:05
ըհը: Լավ չեմ անում չե? :pardon
Չէ, ինչի? Նորմալ ա :)
Հիմա մի ժամով դուրս եմ գալիս, գամ մոտս WampServer-ը քցեմ, կասեմ, թե ինչը ոնց փոխես, որ հայերեն յունիկոդը ճիշտ ցույց տա: Բայց արդեն հարցական դարձածները էլ չեն ուղղվի:
Ընդունելի է տենց տարբերակը?

BeatleMan
01.11.2011, 12:08
Շատ շատ մերսի:oy: Հա ոչինչ մի 6 հատ մենյուի անունա նորից կգրեմ :B

Varzor
01.11.2011, 13:40
Շատ շատ մերսի:oy: Հա ոչինչ մի 6 հատ մենյուի անունա նորից կգրեմ :B

Նախ DBEngine կարող ես ընտրել կամ InnoDB կամ MyISA:
MySQL connection collation դնում ես utf8_bin
Նույն կերպ էլ դնում ես նաև քո նկարագրած աղյուսակի (table) տեքստային դաշտիդ տիպը` utf8_bin

Նշեմ նաև, որ կարող ես օգտագործել նաև utf-8_unicode_ci-ն, բայց կախված համակարգային լեզվից հայերեն յունիկոդ սիմվոլների տեղադրությունը փոփոխվում է Windows-ում

PHPMyAdmin-ի վերջին տարբերակն էլ կարող ես քաշել այստեղից (http://network.am/More/WampServer)

BeatleMan
01.11.2011, 23:45
Վարզոր ջան քո ասած բոլոր հնարավոր կոմբինացիաներով փորձեցի մեկա էլի հարցականներով ա բերում: Իմ Wampն էլ հենց ամենավերջիննա: Կարողա ինչ-որ ուրիշ ծրագրային սխալ կա իրա մեջ? ուրիշ էլ ոչ մի բանի հետ չի կարա կապված լինի?

Lusina
02.11.2011, 00:22
Չգիտեմ ինչքանով ա հնարավոր, որ ստեղ էլ օգնի, միգուցե հենց այդպես էլ անում եք, ամեն դեպքում ասեմ. Իմ մոտ նույն խնդիրը եղել ա հայերենի հետ կապված , պարզվեց, որ բազան լցնելուց պարզապես պետք էր դիմացից N գրել՝ N'Պողոս'.
Շուտ եմ ասել, ծիծաղել չկա,գիտեմ , որ տարրական բան ա , ու շատ հավանական ա, որ գիտեք:))

Varzor
02.11.2011, 10:32
Վարզոր ջան քո ասած բոլոր հնարավոր կոմբինացիաներով փորձեցի մեկա էլի հարցականներով ա բերում: Իմ Wampն էլ հենց ամենավերջիննա: Կարողա ինչ-որ ուրիշ ծրագրային սխալ կա իրա մեջ? ուրիշ էլ ոչ մի բանի հետ չի կարա կապված լինի?
Ինչ ՕՀ ա մոտդ ու ինչ ռեգիոնալ ու համակարգային լեզուներ են կարգաբերված?

BeatleMan
02.11.2011, 18:36
Ինչ ՕՀ ա մոտդ ու ինչ ռեգիոնալ ու համակարգային լեզուներ են կարգաբերված?

Windows 7ա Location Armenia, Formats Russia. Իմ էտ չարաբաստիկ թեյբլում 3 լեզվով մենյուա, ու ռուսերենով էլա հարցականներ բերում:


Չգիտեմ ինչքանով ա հնարավոր, որ ստեղ էլ օգնի, միգուցե հենց այդպես էլ անում եք, ամեն դեպքում ասեմ. Իմ մոտ նույն խնդիրը եղել ա հայերենի հետ կապված , պարզվեց, որ բազան լցնելուց պարզապես պետք էր դիմացից N գրել՝ N'Պողոս'.
Շուտ եմ ասել, ծիծաղել չկա,գիտեմ , որ տարրական բան ա , ու շատ հավանական ա, որ գիտեք:))

հեսա կփորձեմ, բայց ինչի հետ ա կապված էտ N-ը?

Lusina
02.11.2011, 18:57
Windows 7ա Location Armenia, Formats Russia. Իմ էտ չարաբաստիկ թեյբլում 3 լեզվով մենյուա, ու ռուսերենով էլա հարցականներ բերում:



հեսա կփորձեմ, բայց ինչի հետ ա կապված էտ N-ը?
Դե չգիտեմ , թե ինչու կոնկրետ N, բայց Ms Sql-ում բազաները լցնելուց դիմացից N գրելիս էլ հարցականներ չէին լինում.Չգիտեմ MySql-ում կաշխատի, թե չէ.

BeatleMan
03.11.2011, 10:32
Ժողովուրդ ջան կներեք անհանգստացնելու համար հազիվ լուծեցի: իմ սխալն էր: Բազայից ինչ-որ բան կանչելուց առաջ սենց արեցի $charset = mysql_query('SET NAMES UTF8'); ու եղավ: Շատ շատ մերսի

Varzor
03.11.2011, 11:06
Ժողովուրդ ջան կներեք անհանգստացնելու համար հազիվ լուծեցի: իմ սխալն էր: Բազայից ինչ-որ բան կանչելուց առաջ սենց արեցի $charset = mysql_query('SET NAMES UTF8'); ու եղավ: Շատ շատ մերսի

Ախպեր, մի րոպե, փաստորեն քո մոտ բազան նորմալ էլ պահում էր, ուղղակի PHP-ով որ նկարում էիր էդ ժամանակ էր սխալ տալիս? :))
Բա շուտ ասա, ես էլ գիտեմ, թե բազայում ա հարցականներ ցույց տալիս:

BeatleMan
03.11.2011, 11:43
Ախպեր, մի րոպե, փաստորեն քո մոտ բազան նորմալ էլ պահում էր, ուղղակի PHP-ով որ նկարում էիր էդ ժամանակ էր սխալ տալիս? :))
Բա շուտ ասա, ես էլ գիտեմ, թե բազայում ա հարցականներ ցույց տալիս:

Հա բազայում նորմալ բերում էր, բրաուզերում էր հարցականները, երևի լավ չէի բացատրել :) ամեն դեպքում Մերսի :good

Lusina
01.06.2015, 01:57
Ժողովուրդ, ուղեղս ժանգոտել ա, բան չեմ հիշում, օգնեք էլի :))

Սենց աղյուսակ ունեմ.
SrcID,
DestID,
DepTime
(Էլի դաշտեր կան, բայց հիմնական հարցումը սրանցով ա)

Պետք ա մուտքագրեմ SrcID-ների հաջորդականություն[n] (Հեշտության համար սկզբում կարան լինեն 3 հատ), մի հատ DestID, ու թվերի հաջորդականություն[n-1] (Մեր օրինակում կլինի 2 հատ թիվ), ու ինձ պետք ա լինելու էն բոլոր տողերը, որոնց համար DepTime-երի տարբերությունը = համապատասխան թվին.

Փորձեմ օրինակի վրա ասեմ, որ ավելի պատկերավոր լինի.
Ենթադրենք ունենք ես աղյուսակը

1.A D 06.31
2.A D 06.55
3.A D 10.00
4.A D 10.25
5.B D 07.00
6.B D 07.23
7.B D 10.29
8.B D 10.47
9.C D 07.10
10.C D 07.15
11.C D 10.39

Հարցմանը տալու ենք A, B, C -որպես SrcID-ների հաջորդականություն, D - որպես destID, (29, 10) deltaTime-երի հաջորդականություն.
Ու ինչ-որ ձևով ( չեմ էլ հիշում՝ հնարավոր էր, թե չէ, ցուցակների ցուցակ վերադարձնել ) էս output-ը
{A D 06.31, B D 07.00, C D 07.10}
{A D 10.00, B.D 10.29, C D 10.39 }
կամ ուղղակի id-ները ինչ-որ ձև խմբավորված
(1, 5, 9) (3, 7, 11)

Եթե վերադարձնելը խնդիր լինի, կարամ առանձին աղյուսակ սարքեմ ու լցնեմ մեջը արդյունքը՝ նույն խմբին պատականողներին նույն id-n տալով.

Էս իմ անհաջող, գեշ, հնարավորինս անարդյունավետ փորձը 2 SrcId-ների համար
SELECT * From Departures as D1 WHERE (Select (strftime('%s',D2.DepTime) - strftime('%s',D1.DepTime))/60 From Departures as D2 WHERE D1.Date = D2.Date AND D1.SrcStationID = 1 AND D2.SrcStationID = 8 AND D1.DestStationID = 11 AND D2.DestStationID = 11 ) = 14

Հ.Գ. Մոռացա նշել, sqlite3 եմ օգտագործում, որը sql-ի բեյզիք հնարավորություններն ունի, բայց էկզոտիկ բաներից պետք ա խուսափեմ :))

Lusina
01.06.2015, 02:25
Ժողովուրդ, ուղեղս ժանգոտել ա, բան չեմ հիշում, օգնեք էլի :))

Սենց աղյուսակ ունեմ.
SrcID,
DestID,
DepTime
(Էլի դաշտեր կան, բայց հիմնական հարցումը սրանցով ա)

Պետք ա մուտքագրեմ SrcID-ների հաջորդականություն[n] (Հեշտության համար սկզբում կարան լինեն 3 հատ), մի հատ DestID, ու թվերի հաջորդականություն[n-1] (Մեր օրինակում կլինի 2 հատ թիվ), ու ինձ պետք ա լինելու էն բոլոր տողերը, որոնց համար DepTime-երի տարբերությունը = համապատասխան թվին.

Փորձեմ օրինակի վրա ասեմ, որ ավելի պատկերավոր լինի.
Ենթադրենք ունենք ես աղյուսակը

1.A D 06.31
2.A D 06.55
3.A D 10.00
4.A D 10.25
5.B D 07.00
6.B D 07.23
7.B D 10.29
8.B D 10.47
9.C D 07.10
10.C D 07.15
11.C D 10.39

Հարցմանը տալու ենք A, B, C -որպես SrcID-ների հաջորդականություն, D - որպես destID, (29, 10) deltaTime-երի հաջորդականություն.
Ու ինչ-որ ձևով ( չեմ էլ հիշում՝ հնարավոր էր, թե չէ, ցուցակների ցուցակ վերադարձնել ) էս output-ը
{A D 06.31, B D 07.00, C D 07.10}
{A D 10.00, B.D 10.29, C D 10.39 }
կամ ուղղակի id-ները ինչ-որ ձև խմբավորված
(1, 5, 9) (3, 7, 11)

Եթե վերադարձնելը խնդիր լինի, կարամ առանձին աղյուսակ սարքեմ ու լցնեմ մեջը արդյունքը՝ նույն խմբին պատականողներին նույն id-n տալով.

Էս իմ անհաջող, գեշ, հնարավորինս անարդյունավետ փորձը 2 SrcId-ների համար
SELECT * From Departures as D1 WHERE (Select (strftime('%s',D2.DepTime) - strftime('%s',D1.DepTime))/60 From Departures as D2 WHERE D1.Date = D2.Date AND D1.SrcStationID = 1 AND D2.SrcStationID = 8 AND D1.DestStationID = 11 AND D2.DestStationID = 11 ) = 14

Հ.Գ. Մոռացա նշել, sqlite3 եմ օգտագործում, որը sql-ի բեյզիք հնարավորություններն ունի, բայց էկզոտիկ բաներից պետք ա խուսափեմ :))

Իրականում, կարա լինի նաև հարցում 2 SrcId-ների ու մի deltaTime-ի համար, քայլ առ քայլ կգտնեմ հաջորդները.

Հ.Գ. Մեկ էլ ասեմ, որ նենց չի, որ ես ալարում եմ մտածեմ, պատրաստի լուծում եմ ուզում :)) Լուրջ ուղեղս ժանգոտել ա, զգում եմ , որ ինչ-որ հեշտ/սիրուն տարբերակ կար էս տիպի հարցումներ անելու համար, որ չեմ կարում հիշեմ.

Արամ
02.06.2015, 00:22
Լուսինա ջան մի բան չհասկացա, DepTime-ը ի՞նչ տիպի ա։ strftime('%s',D2.DepTime) -ը վերադարձնում ա վարկյանները սկսած 1970․01․01-ից, բայց DepTime-ը ժամ ա պահում, այսինքն Date-ը չկա թե կոնկրետ մինչև որը հաշվի, կարո՞ղ ա %S պետք ա գրեի՞ր, ուղղակի էդ դեպքում էլ չեմ հասկանում /60 -ը ինչի համար ա։ Ի՞նչ որ բան չգիտեմ, թե՞ սխալ եմ հասկացել։

Lusina
02.06.2015, 00:46
Լուսինա ջան մի բան չհասկացա, DepTime-ը ի՞նչ տիպի ա։ strftime('%s',D2.DepTime) -ը վերադարձնում ա վարկյանները սկսած 1970․01․01-ից, բայց DepTime-ը ժամ ա պահում, այսինքն Date-ը չկա թե կոնկրետ մինչև որը հաշվի, կարո՞ղ ա %S պետք ա գրեի՞ր, ուղղակի էդ դեպքում էլ չեմ հասկանում /60 -ը ինչի համար ա։ Ի՞նչ որ բան չգիտեմ, թե՞ սխալ եմ հասկացել։

Ներող, մոռացել էի նշել տիպերը. DepTime-ը HH:MM:SS ֆորմատն ունի, մենակ ժամն ա պահում էս մեկի համար, տիպը DATETIME ա, բայց իրականում sqlite-ը չունի հատուկ տիպ Date-ի կամ Time-ի համար, կարծեմ ինքը իգնոռ ա անում, որ ես իրան DATETIME եմ հայտարարել, string ա երևի թե պահում, էականը էն ա, որ ճիշտ ֆորմատով գրված լինի (DD-MM-YYY կամ HH:MM:SS և այլն) . %s -ով վայրկյանների եմ վերածել, հետո բաժանում եմ 60-ի, որ արդյունքը րոպեներով համեմատեմ. Ենթադրում եմ, որ եթե Date չկա, ինքը կամ էսօրվանն ա վերցնում, կամ 1970․01․01, բայց քանի-որ ինձ մենակ տարբերությունն ա հետաքրքիր, Date-ը դեր չի խաղում.Չգիտեմ, թե %S-ը ինչ ա անում ճիշտն ասած.

Իրականում, հիմնական խնդիրը աղյուսակի մեջ գտնել ու վերադարձնել իրար հետ ինչ-որ ձևով կապ ունեցող տողերը (Իմ դեպքում հիմնված DepTime-ի տարբերությունների վրա). Իմ գրածը էդ տողերից մենակ առաջինն էր վերադարձնում.

Էսօր ուրիշ ձևով փորձեցի, քիչ թե շատ աշխատում ա, բայց հիմա պետք ա մի ձև ավելի ընդհանուր սարքեմ, սա ֆիքսված քանակով SrcStation-ների համար ա , բայց որ ավելի շատ լինեն, չգիտեմ Inner Join-ից բացի ինչ տարբերակ կարա լինի. Եթե ինչ-որ մտքեր լինեն, շատ շնորհակալ կլինեմ .

"SELECT D1.Date, D1.DepTime, D2.Date , D2.DepTime, D3.Date, D3.DepTime From Departures D1
INNER JOIN Departures D2 ON D1.Date = D2.Date AND D1.DestStationID = D2.DestStationID
INNER JOIN Departures D3 ON D1.Date = D3.Date AND D1.DestStationID = D3.DestStationID
WHERE D1.SrcStationID = 1 AND D1.DestStationID = 11 AND D2.SrcStationID = 5 AND D3.SrcStationID = 8
AND (strftime('%s',D2.DepTime) - strftime('%s',D1.DepTime))/60 BETWEEN 19 AND 23
AND (strftime('%s',D3.DepTime) - strftime('%s',D2.DepTime))/60 BETWEEN 56 AND 60"

Ներսես_AM
02.06.2015, 01:01
Իրականում, կարա լինի նաև հարցում 2 SrcId-ների ու մի deltaTime-ի համար, քայլ առ քայլ կգտնեմ հաջորդները.

Հ.Գ. Մեկ էլ ասեմ, որ նենց չի, որ ես ալարում եմ մտածեմ, պատրաստի լուծում եմ ուզում :)) Լուրջ ուղեղս ժանգոտել ա, զգում եմ , որ ինչ-որ հեշտ/սիրուն տարբերակ կար էս տիպի հարցումներ անելու համար, որ չեմ կարում հիշեմ.

Պիտի հիշես որ ՍՔԼում չես կարող համեմատես երկու տողերի միջև։ Դրա համար կամ պիտի ոնց որ դու ես փորձել անել ներդրված Select անես կամ JOIN

Ձեռքիս տակ SQL server չկա որ բզբզբեմ, օդից գրում եմ։ Եթե փոքր սխալներ անեմ պիտի դու դզրտես։ Բայց հուսով ընդհանուր իդեան կհասկանաս։



SELECT *
FROM Departures as d1
INNER JOIN Departures as d2
WHERE d1.SrcID = ?
AND d2.SrcID = ?
AND d1.DestId = d2 DestId
AND d1.DestId = ?
AND (strftime('%s',d2.DepTime) - strftime('%s',d1.DepTime))/60 = ?


?–ների փոխարեն որ տաս քո պարամետրրերը (Src1, Src2, Dest, Time) Կստանաս էն տեղը որը կլինի քո ասած օրինակի նման։
Էն ժամանակների համեմատությունը քոնն եմ թողել բայց ոնց որ Արամը ասեց դոկումենտացիային չի բռնում, սխալ ա։
Եթե ժամ ա գրած էդ սյունյակում ու քո ձեռքն ա լավ կլինի ․ ի փոխարեն ։ դնես, այլապես երևի մի հատ ստրինգերի ռեփլեյսով պիտի ․–ը ։ սարքես հետո նոր որ strftime–ը կուտի իրան։


Հ․Գ․ Վայ քու արա էսքան գրեցի պարզվեց արդեն գրել ես :)

Lusina
02.06.2015, 01:11
Պիտի հիշես որ ՍՔԼում չես կարող համեմատես երկու տողերի միջև։ Դրա համար կամ պիտի ոնց որ դու ես փորձել անել ներդրված Select անես կամ JOIN

Ձեռքիս տակ SQL server չկա որ բզբզբեմ, օդից գրում եմ։ Եթե փոքր սխալներ անեմ պիտի դու դզրտես։ Բայց հուսով ընդհանուր իդեան կհասկանաս։



SELECT *
FROM Departures as d1
INNER JOIN Departures as d2
WHERE d1.SrcID = ?
AND d2.SrcID = ?
AND d1.DestId = d2 DestId
AND d1.DestId = ?
AND (strftime('%s',d2.DepTime) - strftime('%s',d1.DepTime))/60 = ?


?–ների փոխարեն որ տաս քո պարամետրրերը (Src1, Src2, Dest, Time) Կստանաս էն տեղը որը կլինի քո ասած օրինակի նման։
Էն ժամանակների համեմատությունը քոնն եմ թողել բայց ոնց որ Արամը ասեց դոկումենտացիային չի բռնում, սխալ ա։
Եթե ժամ ա գրած էդ սյունյակում ու քո ձեռքն ա լավ կլինի ․ ի փոխարեն ։ դնես, այլապես երևի մի հատ ստրինգերի ռեփլեյսով պիտի ․–ը ։ սարքես հետո նոր որ strftime–ը կուտի իրան։


Հ․Գ․ Վայ քու արա էսքան գրեցի պարզվեց արդեն գրել ես :)

Հա , ներող, որոշել էի թեմայում դնել գտածս լուծումը, երբ գտա, ուղղակի մտածում էի՝ ավելի հարմար ձև կգտնեմ՝ առանց ներդրված join-ների, էն էլ փաստորեն էս ա տողերի մեջ համեմատելու ձևը.
Ժամի ֆորմատի հետ կապված շատ չէի խորացել, սկզբում նույնիսկ ուզում էի որպես int դաշտ գրել ստեղ, հիմնական խնդիրս տողերի միջև համեմատելն էր, չգիտեմ վերջում խի որպես ժամ թողեցի ու նորմալ ֆորմատով չգրեցի ստեղ, իզուր շփոթացրի.

Արամ
02.06.2015, 01:20
Ու ստեղ դու հասկանում ես, թե ինչքան ես EntityFramework-ը սիրում :love

Հ․Գ․ Չնայած որ, էս վերջին հեքեթոնին 4 ժամ ծախսել ենք դրա դեբիլի պես CreatedAt-ը clustered index գենեռացնելու վրա։

Ներսես_AM
02.06.2015, 01:21
Լուսինա ջան մի բան չհասկացա, DepTime-ը ի՞նչ տիպի ա։ strftime('%s',D2.DepTime) -ը վերադարձնում ա վարկյանները սկսած 1970․01․01-ից, բայց DepTime-ը ժամ ա պահում, այսինքն Date-ը չկա թե կոնկրետ մինչև որը հաշվի, կարո՞ղ ա պետք ա գրեի՞ր, ուղղակի էդ դեպքում էլ չեմ հասկանում /60 -ը ինչի համար ա։ Ի՞նչ որ բան չգիտեմ, թե՞ սխալ եմ հասկացել։

Էս մասը հետարքրեց օնլայն սքլ սերվեր ճարեցի խաղալու համար։
http://sqlfiddle.com/#!7/53333/1 ստեղ նայի տարբերությունը։ Մեծատառովը ուղղակի իմ եղած դեյթ ֆիլդի մեջի վայրկյաններն ա տալիս։ Դրանով չի լինի համեմատել էս դեպքում

Lusina
02.06.2015, 19:33
Ես էլի եկա :))
Ժող, ուզում եմ արդյունքը մի հատ ուրիշ աղյուսակի մեջ լցնել.
3-րդ աղյուսակս ունենալու ա TrainID, JourneyID, DepID.
Հիմա նախորդ հարցումիցս բոլորը պետք ա ունենան նույն TrainID-ն, հարցման հերթական արդյունքի էլէմենտները (D1, D2, D3) պետք ա ունենան նույն JourneyID-ն , DepID-ն էլ էլեմենտների ունիկալ ID-ներն են (D1.DepID, D2.DepID, D3.DepID).

Չգիտեմ նորմալ բացատրեցի, թե չէ. Ամեն դեպքում, ավելի ընդհանուր ասած՝ ուզածս էս օրինակի մեջ column1-ին ֆիքսված արժեք տալն ա, column2-ին Select հրամանի հերթական ինդեքսը, column3-ին D.DepID

INSERT INTO first_table_name [(column1, column2, column3)]
SELECT column1, column2,column3
FROM second_table_name

Lusina
02.06.2015, 21:55
Ես էլի եկա :))
Ժող, ուզում եմ արդյունքը մի հատ ուրիշ աղյուսակի մեջ լցնել.
3-րդ աղյուսակս ունենալու ա TrainID, JourneyID, DepID.
Հիմա նախորդ հարցումիցս բոլորը պետք ա ունենան նույն TrainID-ն, հարցման հերթական արդյունքի էլէմենտները (D1, D2, D3) պետք ա ունենան նույն JourneyID-ն , DepID-ն էլ էլեմենտների ունիկալ ID-ներն են (D1.DepID, D2.DepID, D3.DepID).

Չգիտեմ նորմալ բացատրեցի, թե չէ. Ամեն դեպքում, ավելի ընդհանուր ասած՝ ուզածս էս օրինակի մեջ column1-ին ֆիքսված արժեք տալն ա, column2-ին Select հրամանի հերթական ինդեքսը, column3-ին D.DepID

INSERT INTO first_table_name [(column1, column2, column3)]
SELECT column1, column2,column3
FROM second_table_name

Էլ պետք չի ժող, որոշեցի միանգամից ֆայլերի մեջ պահել արդյունքը, էլ բազայում չեմ պահի.