2013-02-19 5 views
3

Je rends mon cas réel plus simple.comment faire mysql requête pour ce cas

Le cas:

Il y a plusieurs courbes, ils sont passés en points et chacun d'entre eux ont finale 1 point.The dernier point représenté dans la base de données comme la plus grande valeur point_order de la courbe.

Devrait être trouver des courbes qui passent au point spécifique et ont un même point final (même point_id)

Le cas (tableaux):

table de points:

Edit:

Exemple de table curve_points - trouve toutes les courbes ayant le même point_id = 80 et le même point final:

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 

résultat de sortie doit être:

|curve_id| 
    |119  | 
    |76  | 

Parce que les courbes 119,76 ont un même point final = 6 et ont même point 80. Curve 90 pas parce que le point 6 pas son dernier point

fonction psedocode - besoin d'ajouter du code pour choisir un même point finale:

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 en ligne avec des données à tester: http://sqlfiddle.com/#!2/59e9f/1 (la requête il existe pas de travaux)

Merci

+0

Voulez-vous dire que le point final et point de contournement sont identiques ou dont vous avez besoin courbes que leurs derniers points sont les mêmes? –

+0

Veuillez préciser votre question. Il est encore peu clair – Rachcha

+0

Merci pour les commentaires, je modifie la question - son exemple d'entrée et de sortie. – Yosef

Répondre

1

Si je l'ai raison. Il est quelque chose comme ceci:

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

Merci, s'il vous plaît voir mon edit – Yosef

+0

La requête est maintenant fixée en fonction de vos données. – valex

+0

la requête ne fonctionne pas si j'ajoute plus de courbes: http: //sqlfiddle.com/#! 2/59e9f/1 – Yosef

0

première chose que je veux demander, comment la table de courbe crée relation avec tableau de points? Il doit y avoir REDONDANT Curve_ids pour les mapper avec la table de points.

S'il est possible de modifier la structure de votre base de données, vous pouvez utiliser MySQL Geometry, qui a des classes intégrées comme Point et Curve. Vous pouvez vérifier si deux courbes crosses et beaucoup plus en utilisant la fonctionnalité intégrée.

I found this one related.

+1

merci, je corrige l'erreur - table curve_points et non courbe seule table – Yosef

+0

Sa base de données existante ne peut pas changer de schéma – Yosef