Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

276
Vistas
¿Cómo hacer una matriz a partir de dos consultas con bucle?

Realmente quiero hacer que la matriz primaria tenga la propiedad de clave externa

tengo 2 mesas la tipe_akademik y jam_akademik_a

Luego, jam_akademik tiene una clave externa para tipe_akademik

El siguiente que quiero mostrar como tipe_akademik tiene una lista de jam_akademik_a que se llama list_mapel

Quiero hacer la matriz como:

 { "data": [ { "id": 1, "tipe_akademik": "a", "listmapel": [{//from jam_akademik_a// "id": 1, "mapel": "Pendidikan Agama Islam", "tipe_aka": 1 }, { "id": 10, "mapel": "Bahasa Indo", "tipe_aka": 1 } ] }, and etc

En la parte superior de mi matriz, la primera identificación es la clave principal de tipe_akademik, mientras que tipe _aka es una clave externa para esa identificación, luego trato de hacer 1 matriz a partir de 2 consultas

mi código fuente

 router.get('/test', function (req ,res) { //query let tipe= [] connection.query(`SELECT * FROM tipe_akademik `, function (err, result){ tipe=result let i = 0 for (let mapeltipe of tipe ){connection.query ('SELECT * FROM jam_akademik_a WHERE tipe_aka = ? ' ,[mapeltipe.id] ,function (err, listmapel){ tipe[i].listmapel = listmapel i++ } )}return res.status(500).json ({data: tipe}) } ) });

Pero cuando lo devuelvo, el tipo de matriz aún muestra solo la primera consulta. La matriz que hago para el bucle no se guarda en el tipo de matriz. Gracias si alguien puede ayudarme... por hacer esa consulta 2 en una matriz con el bucle.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Hay dos cosas que debes hacer.

  1. Sus resultados se devolverán en una función de devolución de llamada, por lo tanto, su declaración de return no funcionará como esperaba. Habrá que await el resultado. Le recomiendo que busque en Google JavaScript async / espere para obtener más detalles y explicaciones. Este hilo también podría ayudar.
  2. Supongo que sus tablas están conectadas a través de una clave externa, por lo que debe usarla en su consulta SQL. Deje que la base de datos haga el trabajo pesado por usted en lugar de hacerlo usted mismo en JavaScript, para eso tiene una base de datos. Puede hacer un llamado INNER JOIN para combinar (en realidad es una intersección de los valores de columna dados) las dos tablas. Le recomiendo que también busque en Google SQL JOIN si no está familiarizado.

Con ambos cambios aplicados, terminaría con una solución similar a esta.

Descargo de responsabilidad: esto no se ha probado y tuve que hacer algunas suposiciones sobre los nombres de los campos de la base de datos para crear la consulta, pero conceptualmente debería funcionar.

 // you can only use async in an async function so make the function async router.get("/test", async function (req, res) { // await until the Promise is rejected or resolved const data = await getDatabaseData(); return res.status(500).json({ data: data }); }); async function getDatabaseData(){ // return a promise immediately and once the callback returns return an error (reject the promise) or the data (resolve the promise) return new Promise((resolve, reject) => { // That's a guess but if you have a foreign key you can JOIN, just search for SQL JOIN and you will find lots of examples/ explanations connection.query(`SELECT * FROM tipe_akademik AS t INNER JOIN jam_akademik_a AS j ON j.listmapel = t.tipe_aka;`, (err, result) => { // if an error occurred reject promise if(err) reject(err); // we have the data so we can resolve the promise else resolve(result); }) }) }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda