Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/12/2014, 20:23
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 9 meses
Puntos: 2658
Respuesta: obtener y agrupar dependencias

Código SQL:
Ver original
  1. mysql> SELECT
  2.     ->     REPLACE(CAST(CONCAT(M1.modelosId,
  3.     ->                 '.',
  4.     ->                 IFNULL(M2.modelosid, ''),
  5.     ->                 '.',
  6.     ->                 IFNULL(M3.modelosid, ''))
  7.     ->         AS CHAR (100)),  '..', '')  IdModelo,
  8.     ->     CONCAT(M1.modelosNombre,
  9.     ->             ' ',
  10.     ->             IFNULL(M2.ModelosNombre, ''), ' ',
  11.     ->             IFNULL(M3.ModelosNombre, ''))nombre
  12.     -> FROM
  13.     ->     modelos M1
  14.     ->         LEFT JOIN
  15.     ->     modelos M2 ON M1.modelosId = M2.modelosPadre
  16.     ->         LEFT JOIN
  17.     ->     modelos M3 ON M2.modelosId = M3.modelosPadre
  18.     -> ORDER BY M1.modelosId , M2.modelosId , M3.modelosId;
  19. +----------+----------------------+
  20. | IdModelo | nombre               |
  21. +----------+----------------------+
  22. | 1.21.    | BMW 320              |
  23. | 1.53.    | BMW e36              |
  24. | 2.28.    | SEAT Ibiza1          |
  25. | 2.29.    | SEAT ibiza  2        |
  26. | 2.37.    | SEAT toledo          |
  27. | 2.38.    | SEAT inca            |
  28. | 3.22.    | Peugeot 206          |
  29. | 3.25.    | Peugeot 207          |
  30. | 3.26.    | Peugeot 306          |
  31. | 3.27.    | Peugeot 307          |
  32. | 3.40.    | Peugeot partner      |
  33. | 6.41.    | FIAT brava           |
  34. | 6.55.    | FIAT bravo           |
  35. | 6.61.    | FIAT stilo           |
  36. | 7.24.    | volvo 123            |
  37. | 8.30.    | Ford tourneo         |
  38. | 8.34.    | Ford escort          |
  39. | 8.39.    | Ford focus           |
  40. | 8.50.62  | Ford mondeo 1.8g     |
  41. | 8.60.    | Ford cougar          |
  42. | 9.31.    | audi a3              |
  43. | 9.51.    | audi a6              |
  44. | 10.32.   | volkswagen golf      |
  45. | 10.43.   | volkswagen polo      |
  46. | 11.33.   | renault 19           |
  47. | 11.44.   | renault clio         |
  48. | 11.46.   | renault scenic       |
  49. | 11.56.   | renault 5            |
  50. | 12.35.   | hyundai accent       |
  51. | 13.36.   | nissan micra         |
  52. | 13.57.   | nissan trade         |
  53. | 14.42.   | opel vectra          |
  54. | 15.45.   | dacia logan          |
  55. | 16.48.   | citroen jumper       |
  56. | 16.52.   | citroen xsara        |
  57. | 17.49.   | mercedes clk         |
  58. | 18.54.   | chrysler voyager     |
  59. | 19.58.   | toyota celica        |
  60. | 20.59.   | honda accord         |
  61. | 21       | 320                  |
  62. | 22       | 206                  |
  63. | 23       | prueba               |
  64. | 24       | 123                  |
  65. | 25       | 207                  |
  66. | 26       | 306                  |
  67. | 27       | 307                  |
  68. | 28       | Ibiza1               |
  69. | 29       | ibiza  2             |
  70. | 30       | tourneo              |
  71. | 31       | a3                   |
  72. | 32       | golf                 |
  73. | 33       | 19                   |
  74. | 34       | escort               |
  75. | 35       | accent               |
  76. | 36       | micra                |
  77. | 37       | toledo               |
  78. | 38       | inca                 |
  79. | 39       | focus                |
  80. | 40       | partner              |
  81. | 41       | brava                |
  82. | 42       | vectra               |
  83. | 43       | polo                 |
  84. | 44       | clio                 |
  85. | 45       | logan                |
  86. | 46       | scenic               |
  87. | 48       | jumper               |
  88. | 49       | clk                  |
  89. | 50.62.63 | mondeo 1.8g gasolina |
  90. | 51       | a6                   |
  91. | 52       | xsara                |
  92. | 53       | e36                  |
  93. | 54       | voyager              |
  94. | 55       | bravo                |
  95. | 56       | 5                    |
  96. | 57       | trade                |
  97. | 58       | celica               |
  98. | 59       | accord               |
  99. | 60       | cougar               |
  100. | 61       | stilo                |
  101. | 62.63.64 | 1.8g gasolina 99     |
  102. | 63.64.   | gasolina 99          |
  103. | 64       | 99                   |
  104. +----------+----------------------+
  105. 82 ROWS IN SET (0.02 sec)
Por cada nivel de profundidad encontrado se requiere un nuevo nivel de LEFT JOIN contra la misma tabla, y ampliar los CONCAT con los respectivos campos.

Personalmente considero que la tabla está mal diseñada, porque estás mezclando en la misma tabla tres conceptos diferentes: Marca, Modelo y DetalleModelo. Son conceptos distintos que deberían estar en tablas diferentes.
A ese esquema le falta normalización.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)