JazMan Posted September 20, 2007 Report Share Posted September 20, 2007 (edited) Problēma ir sekojoša: Ir tabula: busroute_timetable ------------------------------- id bus_route (int) - Maršruta ID bus_stop (int) - Autobusu pieturas ID drive_out (int) - laiks sekundēs - cikos autobuss izbrauc no pieturas Uzrakstīju sekojošu SQL vaicājumu kurš nepieciešams ja es vēlos uzzināt cikos no pieturas A izbrauc autobusi uz pieturu B un cikos tajā pienāk: SELECT t1.drive_out, t1.bus_route, t2.drive_out AS drive_in FROM busroute_timetable AS t1 LEFT JOIN busroute_timetable AS t2 ON t1.bus_route = t2.bus_route AND t2.hidden=0 WHERE t1.bus_stop="Pietura A" AND t2.bus_stop="Pietura B" AND t1.drive_out < t2.drive_out GROUP BY t1.bus_route, t1.drive_out; Maršruta piemērs (Maršruts Varoņu => Vipinga): Varoņu (8:02) -> Zivju bāze (8:45) -> Aušanas cehs (9:40) -> Vipinga (12:05)-> Aušanas cehs (13:05) -> Zivju bāze (14:45) ->Varoņu (15:31)-> Zivjubāze (17:02) -> Aušnas cehs (18:00) -> Vipinga (19:00) T.i. Autobusss kursē no sākuma pieturas "Varoņu" uz beigu pieturu "Vipinga" turp un atpakaļ caur citām pieturām. problēma rodas ja es piemēram velos uzzināt laikus cikos izbrauc autobuss no pieturas "Zivjubāze" uz "Aušanas cehs": šajā gadījumā es piemēram ieraksta Zivjubāze (17:02) -> Aušnas cehs (18:00) vietā dabūju divus Zivju bāze (14:45)-> Aušnas cehs (18:00) - bet šis neder jo starpā ir galapietura Zivjubāze (17:02) -> Aušnas cehs (18:00) Lūdzu palīdziet kā atrisināt šo problēmu ato jau galva kūp!!! :@ Varbūt kaut kā ar MAX paspēlēties :( Edited September 20, 2007 by JazMan Link to comment Share on other sites More sharing options...
JazMan Posted September 20, 2007 Author Report Share Posted September 20, 2007 Nju ko visus nobaidīju ar savu briesmīgo aprakstu Link to comment Share on other sites More sharing options...
Grey_Wolf Posted September 20, 2007 Report Share Posted September 20, 2007 (edited) JazMan --> ne nenobiedeji ar aprakstu bet gan ar Kretinisku topika nosaukumu --> /me shadus liek Ignorlistaa.... pats izlasi topika nosaukumu un padomaa --> galva kuupa taapec ka iespejams ir LEFT JOIN .... --> ja varesi man so izskaidrot tad arii izlasiishu ko esi rakstijis taalaak.... P.S. A kas vel bez SQL daljas varetu buut LEFT JOIN --> varbuut kaada slimiiba no kaa kuup galva? Edited September 20, 2007 by Grey_Wolf Link to comment Share on other sites More sharing options...
JazMan Posted September 20, 2007 Author Report Share Posted September 20, 2007 JazMan --> ne nenobiedeji ar aprakstu bet gan ar Kretinisku topika nosaukumu --> /me shadus liek Ignorlistaa....pats izlasi topika nosaukumu un padomaa --> galva kuupa taapec ka iespejams ir LEFT JOIN .... --> ja varesi man so izskaidrot tad arii izlasiishu ko esi rakstijis taalaak.... P.S. A kas vel bez SQL daljas varetu buut LEFT JOIN --> varbuut kaada slimiiba no kaa kuup galva? :D Nu sorry ka es tads aptaureets, topika nosaukumu nomainiju :) Link to comment Share on other sites More sharing options...
Grey_Wolf Posted September 20, 2007 Report Share Posted September 20, 2007 drive_out no kaa taas sekundes tiek skaitiitas? no pirmas pieturas? un pieturas preciizi noraksturo .. teiksim: galapunkts_1 --> a_1 -> z_1 -> galapunkts_2 -> z_2 --> a_2 .... atgrizjas pie galapunkts_1...... (tobish pieturas kas ir vienaa ielas pusee ar vienu id kas otraa jau pa visam citu..... jo man skjiet ka autobuus (ta jebkursh transports) kursee itkaa pa apli...... a taalak jau sanaak tiira matimatika.... Link to comment Share on other sites More sharing options...
JazMan Posted September 20, 2007 Author Report Share Posted September 20, 2007 drive_out piemēram pieturā "Varoņu" autobuss buus 8:00 tas nozīmē ka drive_out būs 8*3600 par kursēšanu kā jau minēju iepriekš maršruts ( Varoņu - sākumpietura => Vipinga - galapietura) visas maršruta pieturas ir: Varoņu -> Zivju bāze -> Aušanas cehs -> Vipinga kad autobusss nonāk galapieturā "Vipinga" viņš iet atpakaļ: Aušanas cehs -> Zivju bāze ->Varoņu u.t.t piekrītu par to ka atpakaļceļā pietura atrodas ceļa otrajā pusē bet no lietotāja viedokļa tā ir viena un tā pati pietura Link to comment Share on other sites More sharing options...
Grey_Wolf Posted September 20, 2007 Report Share Posted September 20, 2007 (edited) piekrītu par to ka atpakaļceļā pietura atrodas ceļa otrajā pusē bet no lietotāja viedokļa tā ir viena un tā pati pietura no lietotaaja jaa bet no DB viedoklja nee ... Programmesana tomer prasa zinamu precizitaati datos..... peec tevis teiktaa saprotu ka tajaa DB ir pilniigi Visi laiki --> tobish ja buus ir kadaa pieturaa 10 reizes tad ir 10 ieraksti.. Taa? edit: un par taam pieturaam... kaa paskaidrosi kuraa vinjam vajadziiga... vai caur galapunktu vai nee... ja buusi noraadijis kura pietura preciizi vajadziiga taad tachu pazuudiis kaudze ar problemaam ... teiksim useris izvelaas virzienu ... A1 ->B1 vai B1->A1 nosaukumus tad vari likt vienaadus tik ID mainisies Ertibai tos var glabaat atseviskjaa tabulaa.... paskaties kaa ir RigasSatiksmei Edited September 20, 2007 by Grey_Wolf Link to comment Share on other sites More sharing options...
JazMan Posted September 20, 2007 Author Report Share Posted September 20, 2007 (edited) Caut galapieturām parasti neviens nebrauc jo tas ir neloģiski: 1- lieka braukāšana - 2 jāpērk divas biļetes Struktūra ir sekojoša: ir galvenā tabula kurajā kartā ierakstā ir sekojoši dati: ieraksta ID, Maršruta ID, Pieturas ID, un laiks cikos atobuss izbrauc no šīs pieturas. šāda struktūra tika izvēlēta lai vienkāršot datu ievadi , jo būs nepieciešams ievadīt daudz datu. un šobrīd esošajā vaicājumā (piem): SELECT t1.drive_out, t1.bus_route, t2.drive_out AS drive_in FROM busroute_timetable AS t1 LEFT JOIN busroute_timetable AS t2 ON t1.bus_route = t2.bus_route WHERE t1.bus_stop="Zivju bāze" AND t2.bus_stop="Aušanas cehs" AND t1.drive_out < t2.drive_out GROUP BY t1.bus_route, t1.drive_out; izvada sekojošus datus: Izbrauc no "Zivju bāze" | Pienāk "Aušanas cehs" | Maršruts 08:45 | 09:40 | 1 14:45 | 18:00 | 1 17:02 | 18:00 | 1 bet vajag : Izbrauc no "Zivju bāze" | Pienāk "Aušanas cehs" | Maršruts 08:45 | 09:40 | 1 17:02 | 18:00 | 1 dati tabulā ir sekojoši: Maršruts | Pietura | Izbraukšanas laiks 1 | Varoņu | (8:02) 1 | Zivju bāze | (8:45) 1 | Aušanas cehs | (9:40) 1 | Vipinga | (12:05) 1 | Aušanas cehs | (13:05) 1 | Zivju bāze | (14:45) 1 | Varoņu | (15:31) 1 | Zivjubāze | (17:02) 1 | Aušnas cehs | (18:00) 1 | Vipinga | (19:00) respektīvi boldā ir galapieturas Edited September 20, 2007 by JazMan Link to comment Share on other sites More sharing options...
Delfins Posted September 20, 2007 Report Share Posted September 20, 2007 (edited) Heh, taisam lapu Rēzeknes DUS-am!? :) jo man skjiet ka autobuus (ta jebkursh transports) kursee itkaa pa apli...... Aplams viedoklis, pabrauc rīgā ar `3` autobusu vai 25. troļuku. Visvienkāršākais veids - reversā selektēšana... to biš tas ir kaut kas līdzīgs grafa apiešanas mehānismam... sāk no beigām (leaf-a) un nonāk citā punktā.. Tā kā šeit ir viendimensijas saturs, tad tas ir vienkārši.. select * from (select * from table where pietura IN (P1,P2) ORDER BY time_in_sec DESC LIMIT 2 ) ORDER BY time_in_sec ASC Edited September 20, 2007 by Delfins Link to comment Share on other sites More sharing options...
Grey_Wolf Posted September 21, 2007 Report Share Posted September 21, 2007 Aplams viedoklis, pabrauc rīgā ar `3` autobusu un teiksi ka 3 autinsh neveic apli ? (galapunkts1 <--> galapunkts2 un taa visu dienu ..... un tieshi taadelj ieteicu atpakalj marsruta pieturas izdaliit kaa atseviskjas vieniibas ... P.S. ar tresho busu sanaak braukt diezgan biezji (gan vairaak pljauvnieki -> centrs, retaak liidz Bolderaajai... Link to comment Share on other sites More sharing options...
Delfins Posted September 21, 2007 Report Share Posted September 21, 2007 Tā saucāmais `aplis` reāli ir tikai tantiņu izdoms... DB tas izkatās kā vairāki maršruti, nevis zem viena rout-a .. tāpēc arī rodas problēmas kaut ko atselektēt. Principā struktūrai vajadzēja būt: Maršruti (templeiti): routes[iD,name] -> rout_points[route_id,point_id] timetable [iD,route_id] -> timetable_points [route_id,timetable_id,point_id,time_in,time_out] Līdz ar to `routes` saturētu konkrētāgadījumā tikai 2 ierakstus: Varoņu->Vipinga un Vipinga->Varoņu Nav svarīgi, ka tas ir viens un tas pats, bet apgriezts. Pēc tāda principa strādā arī rigassatiksme... Laika uzskaitē galapieturā fiksējot laikus un biļešu serijas numurus (laikam). Link to comment Share on other sites More sharing options...
JazMan Posted September 21, 2007 Author Report Share Posted September 21, 2007 jau atrisinaju problēmu :) Pievienojot laika tabulā vēl vienu lauku "cikla numurs". piemēram braucot no sākuma pieturas uz galapieturu visām starppieturām un gala pieturām vērtiba 1 braucot atpakaļ 2 utt Vops4em viss strādā :P rigassatiksme - man nepatīk pārāk saputrots viss, uz asp un piedevām gljučī bieži sitēmai jābūt pēc iespējas vienkāršākai un ērtākai ;) Link to comment Share on other sites More sharing options...
Delfins Posted September 21, 2007 Report Share Posted September 21, 2007 tieši otrādi ... RS ir tā kā tam ir jābūt! Link to comment Share on other sites More sharing options...
Recommended Posts