Comunidad de diseño web y desarrollo en internet online

Consulta SQL a tabla con subtabla relacionada

Citar            
MensajeEscrito el 15 May 2019 02:45 pm
Muy buenas a tod@s, os comento mi problema:

Tengo 2 tablas (Marcas, Modelos) las cuales tienen una estructura bastante simple:
Marcas:
Id | nombre

Modelos:
Id | Nombre | idmarca

hasta aquí todo bien, la questión es la siguiente:
Hay alguna forma/consulta con la que yo pueda seleccionar todas las marcas (en un array) y todos los modelos (en un subarray) ? me explico, necesito que quede así:
Marca
id:1, nombre = seat
___ id = 1, nombre = ibiza, idmarca = 1
___ id = 2, nombre = toledo, idmarca = 1
___ [etc]
id:2, nombre = citroen
___ id = 3, nombre = C4, idmarca = 2
___ id = 4, nombre = Berlingo, idmarca = 2
[etc]

se que con JOIN puedo relacionar tablas, pero me quedaría así:
(modelo.nombre AS nombremodelo)
id:1, nombre = seat, nombremodelo = ibiza, idmarca = 1
id:2, nombre = seat, nombremodelo = toledo, idmarca = 1
[etc]
y esto es lo que no me interesa precisamente, ya que para el uso que le doy, he de hacer en cada linea del foreach un if de la idmarca, y esto, si tienes pocos registros vale, pero como tengas muchos se relentiza todo... no es óptimo

Espero haberme explicado bien, seguro que tiene solución y es mas fácil de lo que me espero, pero llevo días dandole vueltas y buscando soluciones por internet y nada :cry: .

Gracias de antemano.
Un saludo

Por Loky

85 de clabLevel



Genero:Masculino  

aplicaciones web personalizadas

firefox
Citar            
MensajeEscrito el 23 May 2019 02:36 pm
En este caso tal vez te convenga hacer varias consultas:

1 para levantar las marcas y luego, por cada marca una para traer los modelos.

El problema de este enfoque es que te deja ante el "Problema del N+1".

Una solución piola es hacer 1 primera consulta que traiga todo lo de las marcas y, de esa consulta ir quedándote con los IDs en un arreglo.

Una vez recorrido todo ese arreglo hacés una segunda consulta donde buscas los modelos que estén IN ($arrayIdsMarcas) y vas haciendo el join mediante PHP.

Si la base de datos es grande esto puede acelerar mucho.

Por mchojrin

37 de clabLevel



Genero:Masculino  

Ayudo desarrolladores PHP a acelerar su llegada a Sr.

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.