Pregunta

Perdón por lo que estoy seguro es una cuestión elemental para la mayoría de ustedes, pero tengo un problema con columnas de las tablas de las tablas separadas que tienen el mismo nombre que el uno al otro, y tratando de elegir entre ambas tablas en la misma consulta .

De acuerdo, así que este es mi código:

$q_value = $mdb2->quote($_POST['query']);
$field = $_POST['field'];
$sql = "SELECT m.*, l.name FROM memberlist m, mail_lists l
        WHERE m.$field=$q_value
        AND l.id = m.list
        ORDER BY m.id";
$l_list = $mdb2->queryAll($sql, '', 'MDB2_FETCHMODE_ASSOC');

La lista de miembros tabla tiene las siguientes columnas: Identificación, correo electrónico, lista, el sexo, el nombre

y los mail_lists tabla tiene las siguientes columnas: Identificación, nombre

Después de ejecutar la consulta, lo más tarde bucle a través de los resultados con un foreach así:

foreach ($l_list as $l){ //blahblah }

El problema es que el 'nombre' de columna en mail_lists se refiere a los nombres de la lista, mientras que el 'nombre' de columna en Miembros se refiere al nombre del miembro.

Cuando más tarde el acceso $ l-> nombre (dentro del foreach), voy a recibir m.name o l.name? Por otra parte, ¿cómo puedo obtener acceso a la otra?

O será sólo tengo que hacer dos consultas separadas?

¿Fue útil?

Solución

¿Por qué no se puede simplemente usar:

SELECT m.*, l.name as l_name FROM ...

y luego distinguir entre name y l_name?


Y esto es una cuestión de estilo, para que otros usuarios pueden estar en desacuerdo pero no * uso en las consultas, que tiende a preferir especificaciones de columna explícitos. Eso no es realmente un problema en su caso, otros que si lo que quería hacer:

SELECT m.*, l.* FROM ...

y todavía distinguir entre los dos nombres. Con especificaciones de columna explícitos, se puede añadir una cláusula as a cada columna para dar nombres a continuación únicas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top