mysql_fetch_assoc no puede acceder a nombres de columnas similares

Tengo más de una tabla en mi consulta

$query = mysql_query("SELECT * FROM reservation r, users u ...")

while( $fetch = mysql_fetch_assoc($query)){
    if($fetch['u.id'] == $fetch['r.id']) 
    ...

Y aquí está el problema: tengo el mismo nombre de columna en las tablas y cuando trato de comparar la identificación de las reservas con la identificación del usuario, ¡solo obtengo la identificación de los usuarios!

Puedo reemplazar el '*' con los nombres de las columnas y cambiar su nombre con AS (SELECT s.id as sid ...) pero hay alguna manera más fácil? Por ejemplo:

preguntado el 12 de junio de 12 a las 18:06

Por favor, no utilices mysql_* funciones para el nuevo código. Ya no se mantienen y la comunidad ha comenzado la proceso de desaprobación. Consulte las caja roja? En su lugar, debería aprender sobre declaraciones preparadas y usa ya sea PDO or MySQLi. Si no puedes decidir este artículo ayudará a elegir. Si te importa aprender, aquí hay un buen tutorial de PDO. -

1 Respuestas

Si sus dos tablas tienen una columna con el mismo nombre, entonces solo podrá acceder a uno de esos campos en una matriz asociativa: la clave es el nombre del campo, por lo que el primero se sobrescribe. por el segundo

La solución rápida es, como usted dice, renombrar explícitamente los campos para que no entren en conflicto. Aunque es posible que pueda solucionarlo utilizando mysql_fetch_array - eso le dará todos los campos, pero necesitará acceder a los campos por número de índice; por lo tanto, si cambia las estructuras de la tabla, deberá volver a escribir el código.

La mejor manera es no tener dos campos con el mismo nombre en diferentes tablas, si es posible, si se llamaran reservationID y userID, evitarías esto por completo. Intento no reutilizar nombres de campo a menos que sea una clave externa.

Respondido el 12 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.