Chcę zrobić ścieżki pomiędzy lokacjami, a dane potrzebuję w jakiś sposób zapisać. Mając różne miasta o różnych identyfikatorach liczbowych, teoretycznie wystarczy coś takiego z dwoma indeksami:
Kod:
`city1_id` int unsigned NOT NULL DEFAULT '0',
`city2_id` int unsigned NOT NULL DEFAULT '0',
Jeżeli chcę iść z miasta353 do miasta37 to sprawdzam czy istnieje taki rekord w bazie - jest/nie ma ścieżki.
Robiąc to po prostu zrobiłem klasę, która to obsługuje.. Podaje się 2 id, wiem czy jest ścieżka czy nie. Trzymam się zasady - city1 < city2. Czyli ta klasa odpowiednio mi zamieni zmienne jeżeli podam je w nieprawidłowej kolejności, więc jak dam
Kod:
exists(2, 3)
lub
exists (3,2)
to i tak odpowiedni rekrod mi utworzy.
Bo jak wiadomo
Kod:
WHERE city1_id=353 AND city2_id=37
WHERE city1_id=37 AND city2_id=353
To dwie różne rzeczy..
Zastanawiam się, czy jest jakiś mądry sposób na stworzenie "równoważnych" pól? Czy to może kwestia odpowiedniego wyszukiwania.. Jednak wątpię, by
Kod:
WHERE city1_id=353 AND city2_id=37 OR city1_id=37 AND city2_id=353
było najlepszym rozwiązaniem.. w przypadku wielu danych ilość kombinacji wzrasta zbyt szybko.
Zakładki