Jump to content
php.lv forumi

Vaicājums Autobusu saraksta datubāzei


JazMan

Recommended Posts

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 by JazMan
Link to comment
Share on other sites

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 by Grey_Wolf
Link to comment
Share on other sites

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

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

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

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 by Grey_Wolf
Link to comment
Share on other sites

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 by JazMan
Link to comment
Share on other sites

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 by Delfins
Link to comment
Share on other sites

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

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

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

×
×
  • Create New...