Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Здравствуйте!Ребята очень нужна помощь.Есть таблица routes - МАРШРУТЫ и таблица points - ОСТАНОВКИ.Отношение many to many.ключами служат id-шники таблиц которых связывает третья таблица routes_points.Так вот как выбрать например 5 разных точек из разных маршрутов?То есть все пять точек с разными id и принадлежат к разным маршрутам
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Zuldek пишет:
SELECT FROM points p LEFT JOIN routes_points rp ON p.id = rp.pointid LEFT JOIN routes r ON r.id = rp.routeid WHERE rp.routeid IN (1,2,3)
Как узнать IN (1,2,3)?
----- $i = 0;
$i = $i++ + ++$i; ?
Zuldek
Отправлено: 09 Октября, 2012 - 16:03:15
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
Это значение id-маршрутов (если их несколько), если 1, то всего одно значение. Тогда запрос: ...WHERE rp.routeid = $routeid
Откуда вы его знаете это вам виднее.
jonston
Отправлено: 09 Октября, 2012 - 16:05:51
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Zuldek пишет:
Это значение id-маршрутов (если их несколько), если 1, то всего одно значение. Тогда запрос: ...WHERE rp.routeid = $routeid
Откуда вы его знаете это вам виднее.
Задача заключается в выборке точек по определенным критериям, но что бы id маршрутов не дублировались.Я не знаю заранее в каких маршрутах содержутся эти точки.
----- $i = 0;
$i = $i++ + ++$i; ?
Zuldek
Отправлено: 09 Октября, 2012 - 16:15:44
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
SELECT * FROM points p LEFT JOIN routes_points rp ON p.id = rp.pointid LEFT JOIN routes r ON r.id = rp.routeid GROUP BY r.id LIMIT 5
jonston
Отправлено: 09 Октября, 2012 - 17:54:55
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Zuldek пишет:
SELECT * FROM points p LEFT JOIN routes_points rp ON p.id = rp.pointid LEFT JOIN routes r ON r.id = rp.routeid GROUP BY r.id LIMIT 5
Спасибо, вроде то что нужно.Щас еще потестю.А что делает оператор GROUP BY?
----- $i = 0;
$i = $i++ + ++$i; ?
avtor.fox
Отправлено: 09 Октября, 2012 - 18:15:15
Постоянный участник
Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012 Откуда: Воронеж
LEFTJOIN routes_points AS rp ON p.point_id = rp.point_id
LEFTJOIN routes AS r ON r.route_id = rp.route_id
GROUPBY r.route_id
HAVING distance <'".$distance."'ORDERBY distance, p.point_id LIMIT20;
Так вот при выборке он должен выбирать самые ближайшие точки с разными маршрутами но сортировать их от меньшей дистанции к большей.Вместо того он пропускает некоторые результаты.Каким алгоритмом руководствуется этот оператор не понятно.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.