mysql - What is the best query for this? -
i have tables bus, street, route_going, route_return
in table street have
example:
id | name 1 | street1 2 | street2 3 | street4 ... n | streetn the table route_going, have example:
id_bus | id_street | order 101 | 1 | 1 101 | 2 | 2 101 | 5 | 3 ... the table route_return, have example:
id_bus | id_street | order 101 | 3 | 1 101 | 2 | 2 101 | 1 | 3 ... ok, in example, bus 101 travel streets 1,2 , 5, in order. , bus streets 3,2 , 1, in order.
i want know buses pass @ street 'x' , street 'y' (first x, later y)
for example:
x = 1, y = 5 -> bus 101 pass x = 1, y = 3 -> bus 101 pass x = 3, y = 1 -> bus 101 pass x = 3, y = 5 -> bus 101 don't pass so, sql discover buses is... (passing streets 1 , 5 example)
select * bus b -- bus passes between 2 streets @ going route?? exists (select * route_going rg1, route_going rg2,street r1,street r2 rg1.id_bus = rg2.id_bus , rg1.id_street = r1.id , rg2.id_street = r2.id , r1.id = 1 , r2.id = 5 , b.bus_id = rg1.id_bus , rg1.order <= rg2.order) -- bus passes between 2 streets @ return route?? or exists (select * route_return rg1, route_return rg2,street r1,street r2 rg1.id_bus = rg2.id_bus , rg1.id_street = r1.id , rg2.id_street = r2.id , r1.id = 1 , r2.id = 5 , b.bus_id = rg1.id_bus , rg1.order <= rg2.order) -- bus passes between 2 streets @ going route first , return route later?? or exists (select * route_going rg1, route_return rg2,street r1,street r2 rg1.id_bus = rg2.id_bus , rg1.id_street = r1.id , rg2.id_street = r2.id , r1.id = 1 , r2.id = 5 , b.bus_id = rg1.id_bus) so, think query not good. can me saying 'best' query search?
set @x = 1; set @y = 5; select x.id_bus ( select *,0 returning route_going union select *, 1 route_return ) x join ( select *,0 returning route_going union select *, 1 route_return ) y on y.id_bus = x.id_bus , (y.returning > x.returning or (y.returning = x.returning , y.porder > x.porder)) x.id_street = @x , y.id_street = @y;
Comments
Post a Comment