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

152
Vistas
Php se une a varias filas en una solicitud con marca de fecha y hora

No soy un experto en mysql, así que disculpe la simplicidad de mi pregunta. Tengo una tabla que es así:

 ID - NODE - ORIGIN - VALUE - DATETIME 1 - 11 - P1 - 2031 - 2017-01-01 20:15:17 2 - 11 - P2 - 2531 - 2017-01-01 20:15:17 3 - 11 - P3 - 2731 - 2017-01-01 20:15:17 4 - 11 - P4 - 2031 - 2017-01-01 20:15:17 5 - 11 - P1 - 2831 - 2017-01-01 20:30:17 6 - 11 - P2 - 2917 - 2017-01-01 20:30:17 7 - 11 - P3 - 2631 - 2017-01-01 20:30:17 8 - 11 - P4 - 2031 - 2017-01-01 20:30:17

Y mi solicitud se ve así:

 SELECT * FROM data WHERE NODE = '$nodeid' AND ORIGIN = 'P1' AND DATETIME BETWEEN '$start' and '$end' ORDER BY DATETIME LIMIT 1000

Y recibo una tabla con todos los resultados entre $start y $end que tienen el origen P1

El problema es que estoy tratando de dibujar una tabla HTML que se verá así

 Date /time - P1 - P2 - P3 - P4 2017-01-01 20:15:17 - 2031 - 2531 - 2731 2031 2017-01-01 20:30:17 - 2831 - 2917 - 2631 2031

No sé si soy lo suficientemente claro, pero ni siquiera sé si lo que quiero es posible. Cualquier ayuda será apreciada

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Ya mencionaste la palabra clave JOIN en tu pregunta. Las consultas como la siguiente no son nada difíciles de escribir una vez que aprendes a hacerlo.

En su caso, desea unir la tabla a sí misma. Esto se llama unión automática, pero no funciona de manera diferente a cualquier otra unión. Solo necesita asegurarse de tener diferentes alias para su tabla:

 SELECT d1.`DATETIME`, d1.value P1, d2.value P2, d3.value P3, d4.value P4 FROM data d1 LEFT JOIN data d2 ON d2.`DATETIME` = d1.`DATETIME` AND d2.ORIGIN = 'P2' LEFT JOIN data d3 ON d3.`DATETIME` = d1.`DATETIME` AND d3.ORIGIN = 'P3' LEFT JOIN data d4 ON d4.`DATETIME` = d1.`DATETIME` AND d4.ORIGIN = 'P4' WHERE d1.ORIGIN = 'P1' AND NODE = '$nodeid' AND DATETIME BETWEEN '$start' and '$end' ORDER BY DATETIME LIMIT 1000

Escapé del nombre del campo DATETIME para asegurarme de que funciona porque ese es el nombre de una función y un tipo de datos. No es una palabra clave, por lo que podría funcionar bien (no lo he probado), pero con ticks es seguro que funciona.
Es mejor no usar palabras específicas de SQL en su esquema para que no tenga que preocuparse por cosas como esa.

Una nota final: espero que al menos escape sus variables antes de crear esa consulta.
De lo contrario, su código es vulnerable a las inyecciones de SQL.
Lea esta respuesta para leer cómo debe pasar valores de PHP a SQL.

over 4 years ago · Santiago Trujillo 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