Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: выборка из базы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
jonston
Отправлено: 09 Октября, 2012 - 15:45:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Здравствуйте!Ребята очень нужна помощь.Есть таблица routes - МАРШРУТЫ и таблица points - ОСТАНОВКИ.Отношение many to many.ключами служат id-шники таблиц которых связывает третья таблица routes_points.Так вот как выбрать например 5 разных точек из разных маршрутов?То есть все пять точек с разными id и принадлежат к разным маршрутам

(Отредактировано автором: 09 Октября, 2012 - 15:50:54)



-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
Zuldek
Отправлено: 09 Октября, 2012 - 15:55:03
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 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 WHERE rp.routeid IN (1,2,3)

(Отредактировано автором: 09 Октября, 2012 - 15:55:48)

 
 Top
jonston
Отправлено: 09 Октября, 2012 - 15:57:39
Post 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; ?
 
 Top
Zuldek
Отправлено: 09 Октября, 2012 - 16:03:15
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Это значение id-маршрутов (если их несколько), если 1, то всего одно значение. Тогда запрос: ...WHERE rp.routeid = $routeid
Откуда вы его знаете это вам виднее.
 
 Top
jonston
Отправлено: 09 Октября, 2012 - 16:05:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Zuldek пишет:
Это значение id-маршрутов (если их несколько), если 1, то всего одно значение. Тогда запрос: ...WHERE rp.routeid = $routeid
Откуда вы его знаете это вам виднее.

Задача заключается в выборке точек по определенным критериям, но что бы id маршрутов не дублировались.Я не знаю заранее в каких маршрутах содержутся эти точки.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
Zuldek
Отправлено: 09 Октября, 2012 - 16:15:44
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 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
 
 Top
jonston
Отправлено: 09 Октября, 2012 - 17:54:55
Post 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 GROUP BY r.id LIMIT 5

Спасибо, вроде то что нужно.Щас еще потестю.А что делает оператор GROUP BY?


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
avtor.fox
Отправлено: 09 Октября, 2012 - 18:15:15
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




 
 Top
jonston
Отправлено: 09 Октября, 2012 - 20:43:23
Post 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 GROUP BY r.id LIMIT 5

Есть небольшая проблема.Скрипт вычисляет ближайшие точки от заданной точки по специальной формуле.Вот запрос:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT p.point_id, p.point_name, r.route_id, r.route_number, rp.rp_id, (6371 * acos(cos(radians(".$coords_start[0].")) * cos(radians(point_coords_x) ) * cos(radians(point_coords_y) - radians(".$coords_start[1].")) + sin(radians(".$coords_start[0].")) * sin(radians(point_coords_x)))) AS distance
  3.         FROM points AS p
  4.         LEFT JOIN routes_points AS rp ON p.point_id = rp.point_id
  5.         LEFT JOIN routes AS r ON r.route_id = rp.route_id
  6.         GROUP BY r.route_id
  7.         HAVING distance < '".$distance."' ORDER BY distance, p.point_id LIMIT 20;
  8.  

Так вот при выборке он должен выбирать самые ближайшие точки с разными маршрутами но сортировать их от меньшей дистанции к большей.Вместо того он пропускает некоторые результаты.Каким алгоритмом руководствуется этот оператор не понятно.

(Отредактировано автором: 09 Октября, 2012 - 20:44:17)



-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB