He estado luchando durante un tiempo con esta; Trataré de explicarlo aquí de la manera más simple posible.Tabla de HTML único de varias tablas de MySQL
considerar esta tabla de MySQL:
+----------+-----------+---------+--------+
|status_id |session_id |pilot_id |present |
+----------+-----------+---------+--------+
|1 |61 |901 |1 |
|2 |63 |901 |1 |
|3 |62 |901 |0 |
|4 |62 |902 |1 |
|5 |63 |903 |1 |
+----------+-----------+---------+--------+
Tanto session_id
y pilot_id
son las claves externas que hacen referencia a una clave primaria en otra tabla. El mismo pilot_id
se puede asociar con diferentes session_id
, pero cada combinación de pilot_id
- session_id
es única.
Necesito hacer una tabla HTML (en PHP) que mostrar los datos como este:
+----------+---------+---------+---------+
| |61 |62 |63 |
+----------+---------+---------+---------+
|901 |X | |X |
|902 | |X | |
|903 | | |X |
+----------+---------+---------+---------+
Por lo tanto, las filas son pilot_id
y columnas son session_id
. Cuando una combinación pilot_id
- session_id
tiene un valor present
de 1, se debe marcar la celda correspondiente. (es decir, cuando la combinación de filas es cero o la combinación no existe en la tabla MySQL, nada debe aparecer en la tabla HTML)
Phew.
¿Alguna idea?
Gracias!
He intentado la respuesta propuesto por Erisco, pero estoy bastante confundido. (el campo de comentarios es demasiado pequeño para mi explicación, de ahí esta actualización de mi pregunta).
Estos son los datos reales que estoy trabajando con:
+----------+-----------+---------+--------+
|status_id |session_id |pilot_id |present |
+----------+-----------+---------+--------+
|7 |65 |33 |1 |
|8 |66 |33 |1 |
|9 |65 |17 |0 |
|10 |66 |16 |1 |
+----------+-----------+---------+--------+
utilizo $rows = mysqli_fetch_array($result);
. Confirmé que la consulta está devolviendo los datos correctos.
Sin embargo, cuando uso la respuesta propuesta por ericso, obtengo datos aparentemente arbitrarios. Aquí está la tabla HTML generada:
+----------+---------+---------+---------+---------+
| |1 |3 |6 |7 |
+----------+---------+---------+---------+---------+
|1 |X | | | |
|3 | | | | |
|6 | | | | |
|7 | | | | |
+----------+---------+---------+---------+---------+
Además posición de la 'X' sigue siendo el mismo a cuento de present
valores.
¿Alguna idea de por qué sucede esto?
Gracias!
Si var_dump'd sus filas frente a los $ $ filas que tengo, lo que probablemente ver las diferencias. Intentaría usar '$ rows = mysqli_fetch_all ($ result, MYSQLI_ASSOC);' – erisco
Ah, sí. Veo que algo está mal.Cuando utilizo mysqli_fetch_assoc consigo: array (4) { [ "status_id"] => string (1) "7" [ "pilot_id"] => string (2) "33" [ "session_id"] => string (2) "65" [ "presente"] => string (1) "1"} , que es sólo la primera fila ... ¿Por qué? De todas formas, $ filas = mysqli_fetch_all ($ resultado, MYSQLI_ASSOC) no funcionó, aunque ... (de lo que en Google, no tengo mysqlnd - que no puedo instalar en mi servidor compartido). Aquí está el error: Fatal error: Llamada a mysqli_fetch_all función no definida(). ¡Gracias! –
que acaba de terminar de hacer esto: filas $ = array(); while ($ rawRow = mysqli_fetch_assoc ($ resultado)) { $ filas [] = $ rawRow; } –