Pergunta

Com licença pelo que tenho certeza de que é uma pergunta elementar para a maioria de vocês, mas tenho um problema com colunas de tabela de tabelas separadas com o mesmo nome e tentando selecionar entre as duas tabelas na mesma consulta.

Ok, então este é o meu 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');

A lista de membros da tabela possui as seguintes colunas: ID, email, lista, sexo, nome

e a tabela Mail_lists tem as seguintes colunas: id, nome

Depois de executar a consulta, mais tarde percorro os resultados com um foreach assim:

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

O problema é que a coluna 'nome' em Mail_lists se refere aos nomes da lista, enquanto a coluna 'nome' na lista de membros se refere ao nome do membro.

Quando mais tarde acesse $ l-> nome (dentro do foreach), vou receber o M.Name, ou L.Name? Além disso, como faço para obter acesso ao outro?

Ou terei que fazer duas consultas separadas?

Foi útil?

Solução

Por que você não pode simplesmente usar:

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

e depois distinguir entre name e l_name?


E isso é uma questão de estilo, para que outros possam discordar, mas eu Nunca usar * Em consultas, tendendo a preferir especificações explícitas da coluna. Isso não é realmente um problema no seu caso, além de se você quisesse fazer:

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

e ainda distingue entre os dois nomes. Com especificações explícitas da coluna, você pode adicionar um as Cláusula para cada coluna para fornecer nomes exclusivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top