2013-02-19 2 views
3

Я делаю свой реальный случай более простым.как сделать запрос mysql для этого случая

Корпус:

Есть несколько кривых они проходили в точках, и каждый из них имеют конечную 1 point.The конечную точку, представленную в базе данных как большое значение point_order кривого.

Должно быть найти кривые, которые проходят в определенной точке и имеют ту же конечную точку (такой же point_id)

Случай (таблицы):

точка таблицы:

Edit:

пример кривой curve_points - найти все кривые, которые имеют одинаковые point_id = 80 и ту же конечную точку:

id|curve_id|point_id|point_order 
    |119  |6  |12 
    |119  |80  |9 
    |119  |1000 |1 
    |76  |80  |7 
    |76  |6  |9 
    |76  |2  |2 
    |90  |80  |7 
    |90  |6  |9 
    |90  |99  |15 

Результат Выход должен быть:

|curve_id| 
    |119  | 
    |76  | 

Поскольку кривые 119,76 имеют одинаковую конечную точку = 6 и имеют ту же точку 80. Кривая 90 не потому, что точка 6 не его конечная точка

psedocode функция - нужно добавить код для выбора той же конечной точки:

function findCurvesForSamePointAndSameFinalPoint(pointID){ 
    query="SELECT curve_id FROM curve INNER JOIN point GROUP BY curve_id HAVING point_id="+pointID+";"; 
    return getDATABASEResult(query); 
} 

Edit2: онлайн SQL с некоторыми данными для теста: http://sqlfiddle.com/#!2/59e9f/1 (существовавшему запрос не работает)

Благодаря

+0

ли вы имеете в виду, что окончательную точку и пройти точку являются одинаковыми или вам необходимо кривые, их конечные точки являются одинаковыми? –

+0

Пожалуйста, уточните свой вопрос. Это все еще неясно – Rachcha

+0

Спасибо за комментарии Я редактирую вопрос - его содержащий пример ввода и вывода. – Yosef

ответ

1

Если я получил это право. Это что-то вроде этого:

SQLFiddle demo

select distinct c1.curve_id,(select point_id from curve t1 
     where t1.curve_id=c1.curve_id 
     order by point_order desc 
     limit 1) 
TheLastPoint 

from curve c1 
join curve c2 on 
(select point_id from curve t1 
     where t1.curve_id=c1.curve_id 
     order by point_order desc 
     limit 1) 
= 
(select point_id from curve t2 
     where t2.curve_id=c2.curve_id 
     order by point_order desc 
     limit 1) 
And c1.curve_id<>c2.curve_id 

where c1.curve_id in (select curve_id from curve where point_id=80) 
     and 
     c2.curve_id in (select curve_id from curve where point_id=80) 
order by TheLastPoint,c1.curve_id 
+0

Спасибо, см. Мое редактирование – Yosef

+0

Теперь запрос исправлен в соответствии с вашими данными. – valex

+0

запрос не работает, если я добавляю больше кривых: http: //sqlfiddle.com/#! 2/59e9f/1 – Yosef

0

Первое, что я хочу спросить, как кривая таблицы создает связь с точкой таблицы? Должно быть REDUNDANT Curve_ids, чтобы сопоставить их с таблицей точек.

Если вы можете изменить структуру базы данных, вы можете использовать MySQL Geometry, который имеет встроенные классы, такие как Point и Curve. Вы можете проверить, есть ли две кривые crosses и многие другие, используя встроенную функциональность.

I found this one related.

+1

спасибо, я исправлю таблицу ошибок - curve_points, а не только таблицу кривых – Yosef

+0

Существующая база данных не может изменить схему – Yosef

Смежные вопросы