Վարզոր ջան քո ասած բոլոր հնարավոր կոմբինացիաներով փորձեցի մեկա էլի հարցականներով ա բերում: Իմ Wampն էլ հենց ամենավերջիննա: Կարողա ինչ-որ ուրիշ ծրագրային սխալ կա իրա մեջ? ուրիշ էլ ոչ մի բանի հետ չի կարա կապված լինի?
Վարզոր ջան քո ասած բոլոր հնարավոր կոմբինացիաներով փորձեցի մեկա էլի հարցականներով ա բերում: Իմ Wampն էլ հենց ամենավերջիննա: Կարողա ինչ-որ ուրիշ ծրագրային սխալ կա իրա մեջ? ուրիշ էլ ոչ մի բանի հետ չի կարա կապված լինի?
Life Is A Miracle
Չգիտեմ ինչքանով ա հնարավոր, որ ստեղ էլ օգնի, միգուցե հենց այդպես էլ անում եք, ամեն դեպքում ասեմ. Իմ մոտ նույն խնդիրը եղել ա հայերենի հետ կապված , պարզվեց, որ բազան լցնելուց պարզապես պետք էր դիմացից N գրել՝ N'Պողոս'.
Շուտ եմ ասել, ծիծաղել չկա,գիտեմ , որ տարրական բան ա , ու շատ հավանական ա, որ գիտեք![]()
Ժողովուրդ ջան կներեք անհանգստացնելու համար հազիվ լուծեցի: իմ սխալն էր: Բազայից ինչ-որ բան կանչելուց առաջ սենց արեցի $charset = mysql_query('SET NAMES UTF8'); ու եղավ: Շատ շատ մերսի
Life Is A Miracle
Ժողովուրդ, ուղեղս ժանգոտել ա, բան չեմ հիշում, օգնեք էլի
Սենց աղյուսակ ունեմ.
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:04:
Իրականում, կարա լինի նաև հարցում 2 SrcId-ների ու մի deltaTime-ի համար, քայլ առ քայլ կգտնեմ հաջորդները.
Հ.Գ. Մեկ էլ ասեմ, որ նենց չի, որ ես ալարում եմ մտածեմ, պատրաստի լուծում եմ ուզումԼուրջ ուղեղս ժանգոտել ա, զգում եմ , որ ինչ-որ հեշտ/սիրուն տարբերակ կար էս տիպի հարցումներ անելու համար, որ չեմ կարում հիշեմ.
Լուսինա ջան մի բան չհասկացա, DepTime-ը ի՞նչ տիպի ա։ strftime('%s',D2.DepTime) -ը վերադարձնում ա վարկյանները սկսած 1970․01․01-ից, բայց DepTime-ը ժամ ա պահում, այսինքն Date-ը չկա թե կոնկրետ մինչև որը հաշվի, կարո՞ղ ա %S պետք ա գրեի՞ր, ուղղակի էդ դեպքում էլ չեմ հասկանում /60 -ը ինչի համար ա։ Ի՞նչ որ բան չգիտեմ, թե՞ սխալ եմ հասկացել։
Վերջին խմբագրող՝ Արամ: 02.06.2015, 00:29:
Lusina (02.06.2015)
Ներող, մոռացել էի նշել տիպերը. 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"
Վերջին խմբագրող՝ Lusina: 02.06.2015, 00:52:
Պիտի հիշես որ ՍՔԼում չես կարող համեմատես երկու տողերի միջև։ Դրա համար կամ պիտի ոնց որ դու ես փորձել անել ներդրված Select անես կամ JOIN
Ձեռքիս տակ SQL server չկա որ բզբզբեմ, օդից գրում եմ։ Եթե փոքր սխալներ անեմ պիտի դու դզրտես։ Բայց հուսով ընդհանուր իդեան կհասկանաս։
?–ների փոխարեն որ տաս քո պարամետրրերը (Src1, Src2, Dest, Time) Կստանաս էն տեղը որը կլինի քո ասած օրինակի նման։Կոդ: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 = ?
Էն ժամանակների համեմատությունը քոնն եմ թողել բայց ոնց որ Արամը ասեց դոկումենտացիային չի բռնում, սխալ ա։
Եթե ժամ ա գրած էդ սյունյակում ու քո ձեռքն ա լավ կլինի ․ ի փոխարեն ։ դնես, այլապես երևի մի հատ ստրինգերի ռեփլեյսով պիտի ․–ը ։ սարքես հետո նոր որ strftime–ը կուտի իրան։
Հ․Գ․ Վայ քու արա էսքան գրեցի պարզվեց արդեն գրել ես![]()
Վերջին խմբագրող՝ Ներսես_AM: 02.06.2015, 01:05:
Հա , ներող, որոշել էի թեմայում դնել գտածս լուծումը, երբ գտա, ուղղակի մտածում էի՝ ավելի հարմար ձև կգտնեմ՝ առանց ներդրված join-ների, էն էլ փաստորեն էս ա տողերի մեջ համեմատելու ձևը.
Ժամի ֆորմատի հետ կապված շատ չէի խորացել, սկզբում նույնիսկ ուզում էի որպես int դաշտ գրել ստեղ, հիմնական խնդիրս տողերի միջև համեմատելն էր, չգիտեմ վերջում խի որպես ժամ թողեցի ու նորմալ ֆորմատով չգրեցի ստեղ, իզուր շփոթացրի.
Ու ստեղ դու հասկանում ես, թե ինչքան ես EntityFramework-ը սիրում
Հ․Գ․ Չնայած որ, էս վերջին հեքեթոնին 4 ժամ ծախսել ենք դրա դեբիլի պես CreatedAt-ը clustered index գենեռացնելու վրա։
Այս պահին թեմայում են 1 հոգի. (0 անդամ և 1 հյուր)
Էջանիշներ