SQL resulta em matriz PHP
Pergunta
Eu gostaria de criar uma matriz (em PHP) a partir de resultados SQL como este: temos a tabela sql "Posts" que armazena o Nome e a Mensagem.Exemplo:
Nome | Mensagem
John | Olá
Nick | Belo dia
George | Adeus
John | Onde
O que eu quero é produz os nomes das pessoas que postaram uma mensagem, mas não exibem os mesmos nomes mais de uma vez. Então a saída seria John, Nick, George. (A partir desses registros, vemos que John publicou 2 mensagens, mas na saída final, vemos apenas uma vez o nome dele).
Isso de alguma forma é possível? Desde já, obrigado.
Solução
Tentar:
$sql = <<<END
SELECT DISTINCT Name FROM Posts
END;
$query = mysql_query($sql) or die($sql . ' - ' . mysql_error());
$names = array();
while ($row = mysql_fetch_array($query)) {
$names[] = $row[0];
}
print_r($names);
Outras dicas
Selecione distinto
Você pode executar uma consulta SQL para selecionar apenas os nomes distintos, e nada mais:
SELECT DISTINCT Name FROM Posts;
Isso fornecerá um conjunto de resultados que consiste em valores de nomes distintos, com cada valor exclusivo sendo retornado apenas 1 tempo no conjunto.
Para obter a contagem, você precisará agregar usando o grupo por:
SELECT
NAME
, COUNT(*) as Posts
FROM
Posts
GROUP BY
NAME
Aqui está o SQL se você não é avesso ao grupo por
select count(name) as N, name from posts group by name ;
Pessoas com mais de 1 post
select count(name) as N, name from posts group by name having N > 1 ;