Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pobieranie danych o strukturze hierarchicznej w MySQL

MySQL nie ma rekurencyjnych zapytań, które są częścią standardowego SQL. Wiele innych marek baz danych obsługuje tę funkcję, w tym PostgreSQL (patrz http://www.postgresql.org/docs/8.4/static/queries-with.html ).

Istnieje kilka technik obsługi danych hierarchicznych w MySQL.

  • Najprostsze byłoby dodanie kolumny, aby odnotować hierarchię, do której należy dane zdjęcie. Następnie możesz wyszukać zdjęcia należące do tej samej hierarchii, pobrać je wszystkie z powrotem do aplikacji i znaleźć te, których tam potrzebujesz. Jest to trochę marnotrawne pod względem przepustowości, wymaga napisania większej ilości kodu aplikacji i nie jest dobre, jeśli twoje drzewa mają wiele węzłów.

Istnieje również kilka sprytnych technik przechowywania danych hierarchicznych, dzięki czemu można je wyszukiwać:

  • Wyliczanie ścieżek przechowuje listę przodków z każdym węzłem. Na przykład zdjęcie 5 w twoim przykładzie przechowuje „0-2-4-5”. Możesz szukać przodków, wyszukując węzły, których ścieżka połączona z "%" jest dopasowana do ścieżki 5 z LIKE orzeczenie.

  • Zestawy zagnieżdżone to złożona, ale sprytna technika spopularyzowana przez Joe Celko w jego artykułach i książce „Trees and Hierarchical in SQL for Smarties”. Istnieje również wiele blogów internetowych i artykułów na ten temat. Zapytanie o drzewa jest łatwe, ale trudne jest zapytanie o bezpośrednie dzieci lub rodziców i trudne do wstawiania lub usuwania węzłów.

  • Tabela zamknięcia wiąże się z przechowywaniem każdej relacji przodek/potomek w osobnej tabeli. Jeśli dodasz pathlength, łatwo jest zadawać zapytania do drzew, wstawiać i usuwać, a także wysyłać zapytania do bezpośrednich rodziców lub dzieci kolumna.

Więcej informacji porównujących te metody można znaleźć w mojej prezentacji Praktyczny obiekt -Zorientowane modele w SQL lub moja nadchodząca książka Antywzorce SQL:unikanie pułapek programowania baz danych .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Solenie moich hashów za pomocą PHP i MySQL

  2. jak wyprowadzić tabelę klasyfikacji w locie z tabeli mysql wyników piłkarskich [soccer]?

  3. Określona wartość liczby SQL w wielu kolumnach i wierszach

  4. Automatyczne skalowanie z Amazon Aurora Serverless

  5. Nie można znaleźć żadnego pasującego wiersza w tabeli użytkownika