Pergunta

Eu tenho três tabelas chamado: users, facilities, e staff_facilities.

users contém a média de dados do usuário, os campos mais importantes no meu caso, sendo users.id, users.first, e users.last.

facilities também contém uma quantidade razoável de dados, mas nenhuma delas é necessariamente pertinentes para este exemplo, exceto facilities.id.

staff_facilties consiste em staff_facilities.id (int,auto_inc,NÃO NULO),staff_facilities.users_id (int,int not NULL), e staff_faciltities.facilities_id (int,int not NULL).(Que é um bocado!)

staff_facilities referências a ids para as duas outras tabelas, e estamos chamando esta tabela para pesquisar usuários' e instalações dos estabelecimentos usuários.

Esta é a minha escolha de consulta em PHP:

SELECT users.id, users.first, users.last FROM staff_facilities LEFT JOIN users ON staff_facilities.users_id=users.id WHERE staff_facilities.facilties_id=$id ORDER BY users.last

Esta consulta funciona muito bem no nosso servidor de desenvolvimento, mas quando eu soltá-lo para o cliente de ambiente de produção muitas vezes linhas em branco aparecem no conjunto de resultados.Nosso servidor de desenvolvimento está usando as tabelas replicadas e os dados que já existem no cliente do servidor de produção, mas o hardware e o software variar um pouco.

Estas linhas são desprovidas de qualquer informação, incluindo os três campos de identificação que exigem NÃO valores NULOS para ser inserido no banco de dados.Executando a consulta através do MySQL ferramentas de gestão no back-end retorna os mesmos resultados.Procurar a tabela de campos NULOS não apareceu nada.

Outra coisa estranha é que o número de linhas vazias está mudando com base na variação dos resultados causada pela cláusula WHERE id de seleção.É geralmente em torno de uma a três linhas vazias, mas eles são consistentes ao usar o mesmo parâmetro.

Eu muitas vezes tratados com o retorno de cerca de linhas duplicadas devido à ESQUERDA JUNTA, mas eu nunca tinha acontecido antes.Na medida exibir as informações vão, eu posso facilmente esconder do usuário final.A minha preocupação é, principalmente, que esse problema será agravado medida que o tempo passa e aumenta o número de registos maior.Como ela se senta, este sistema foi instalado, e já temos mais de 2000 registros no staff_facilities tabela.

Qualquer visão ou direção seria apreciada.Eu posso fornecer mais exemplos mais detalhados e informações bem.

Foi útil?

Solução

Você é apenas uma seleção de colunas da tabela no lado direito da junção.É claro que alguns deles são completamente nulo, você fez um left join.Assim, os registros correspondem a um id na tabela do lado esquerdo da associação, mas não quaisquer dados no lado direito da junção.Já que você não é retornar todas as colunas da tabela à esquerda, você vê nenhum de dados.

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