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:17Y 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 2031No sé si soy lo suficientemente claro, pero ni siquiera sé si lo que quiero es posible. Cualquier ayuda será apreciada
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.