Estou a tentar encontrar ajuda para isto mas está difícil.
http://img172.imageshack.us/img172/2673/tablejm4.png
O que eu queria era criar uma lista com o php, tipo:
Mundo:
foo
Far
VoxPolítica:
barr
CarEstava a tentar utilizar o GROUP BY mas não consigo com que a coisa saia como deve ser.
SELECT noticias.nome, sections.nome FROM noticias JOIN sections ON noticias.section_ID = sections.ID (http://dev.mysql.com/doc/refman/5.1/en/join.html)
Funciona?
Ya! Funciona. Pensava que tivesse que utilizar o GROUP BY.
E como é o código PHP para mostrar
Thanks!
AliFromCairo
16-03-2008, 15:42
Para mostrar, só tens que executar a query que foi colocada nesta thread (mysql_connect, ..., mysql_query, ...), e ir guardando num array as entradas para cada secção. Se não quiseres um array auxiliar, podes ordenar os dados pelo nome da secção.
..Se não quiseres um array auxiliar, podes ordenar os dados pelo nome da secção.
Era ordenar por secção que queria fazer, só que isto está difícil, não consigo compreeender...
http://img134.imageshack.us/img134/8897/tableei1.png
$q = "SELECT noticias.nome AS not_nome, sections.nome AS sec_nome
FROM noticias
JOIN sections
ON noticias.section_id = sections.id";
$r = mysql_query($q);
while ($row = mysql_fetch_assoc($r)) {
echo $row["not_nome"].'-->'.$row['sec_nome'].'<br />';
echo '<br />';
}
O que me dá:
foo-->Mundo
barr-->Politica
car-->Politica
far-->Mundo
vox-->Mundo
O que quero fazer é ter o nome da secção no topo, uma só vez seguido dos artigos correspondentes, tipo um sitemap ou um menu...
Experimenta algo deste género: (não garanto q não tenha um ou outro erro :winknu:)
$categ= "SELECT * FROM Sections";
$result=mysql_query($categ);
while ($row1 =mysql_fetch_array($result) ) {
echo "<ul>" . $row1['nome'] . "</ul>";
$q = "SELECT noticias.nome AS not_nome, sections.nome AS sec_nome
FROM noticias
JOIN sections
ON noticias.section_id = sections.id
WHERE section_id='" . $row1['ID'] . "'" ;
$r = mysql_query($q);
while ($row = mysql_fetch_assoc($r)) {
echo "<li>" .$row["not_nome"] . '</li>';
}
}
AliFromCairo
16-03-2008, 23:29
Podes usar a cláusula ORDER BY para ordenares os dados pelo nome da secção. Algo do género:
SELECT noticias.nome, sections.nome
FROM noticias JOIN sections ON noticias.section_id = sections.id
ORDER BY sections.nome
Usando a query acima, as linhas vão aparecer ordenadas de acordo com o nome da secção, sendo que apenas necessitas de alterar ligeiramente o teu código, de modo a guardares o último nome da secção que apareceu para não estares a repeti-lo.
Qualquer dúvida coloca aqui.
Ai!
Usei o exemplo do Serrot e estava quase o que queria:
$categ= "SELECT * FROM Sections";
$result=mysql_query($categ);
$i = 0;
while ($s =mysql_fetch_array($result) ) {
$y[$s['nome']] = $s['nome'];
$q = "SELECT noticias.nome AS not_nome, sections.nome AS sec_nome
FROM noticias
JOIN sections
ON noticias.section_id = sections.id
WHERE section_id='" . $s['ID'] . "'" ;
$r = mysql_query($q);
while ($row = mysql_fetch_assoc($r)) {
$x[] = $row['not_nome'];
}
$y[$s['nome']] = $x;
}
O que dá:
Array
(
[Mundo] => Array
(
[0] => foo
[1] => far
[2] => vox
)
[Politica] => Array
(
[0] => foo
[1] => far
[2] => vox
[3] => barr
[4] => car
)
)
Os valores assinalados não deveriam aparecer...
Era um problema com as arrays!
$categ= "SELECT * FROM Sections";
$result=mysql_query($categ);
$i = 0;
while ($s =mysql_fetch_array($result) ) {
//$y[$s['nome']] = $s['nome'];
$q = "SELECT noticias.nome AS not_nome, sections.nome AS sec_nome
FROM noticias
JOIN sections
ON noticias.section_id = sections.id
WHERE section_id='" . $s['ID'] . "'" ;
$r = mysql_query($q);
while ($row = mysql_fetch_assoc($r)) {
$y[$s['nome']][] = $row['not_nome'];
}
}
Array
(
[Mundo] => Array
(
[0] => foo
[1] => far
[2] => vox
)
[Politica] => Array
(
[0] => barr
[1] => car
)
)
Agora só tenho de descobrir o método para extrair isto para uma tpl do smarty...