• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Vnepomuceno

Array's, Desespero

15 mensagens neste tópico

Arghhh, podem-me dar uma ajudinha com array's?  :mad:

É o seguinte a minha ideia é fazer uma listagem de todos os "clientes" de uma base de dados, então o que pensei foi:

$clientes = mysql_fetch_array(mysql_query("SELECT ID, nome FROM clientes ORDER BY ID ASC;")); 
$listagem_clientes = array($clientes['ID'] => $clientes['nome']);
foreach($listagem_clientes as $key => $val) { echo "<li>Cliente nr $key chamado $val</li>"; }

Mas só me aparece o primeiro registo, que é o de mais baixo ID (1)

Alguma ideia de como resolver o problema neste código, ou de como arquitectar um melhor?

Obrigado e feliz natal  :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que isto serve...

$query = mysql_query("SELECT ID, nome FROM clientes ORDER BY ID ASC;") 

while( $row = mysql_fetch_array($query)) {

echo "<li>Cliente nr {$row['ID']} chamado {$row['nome']} </li>";

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se queres primeiro passar para uma array o erro está aqui:

$listagem_clientes = array($clientes['ID'] => $clientes['nome']);

Isto já vai dar:

$arr=array();

$query = mysql_query("SELECT ID, nome FROM clientes ORDER BY ID ASC;")
while($row = mysql_fetch_array($query)) $arr[$row['ID']] = $row['nome']);

foreach($arr as $key => $val) echo "<li>Cliente nr $key chamado $val</li>";

EDIT: Tava-te a dar só o 1º pk n tinhas o while e dps pk tavas sempre a definir $listagem_clientes como uma nova array e não a continuação de uma penso eu de que.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado aos dois pela ajuda :) O "script" do kingless é bem fácil de entender.

Agora outro tipo de arrays  :D

Estou a preparar um script que de várias tabelas da base de dados são escolhidas colunas com valores "em comum" e estas serão comparadas, e das 4 tabelas será escolhido o registo com o valor mais alto:

$stardesign = mysql_fetch_array(mysql_query("SELECT title, rating FROM design ORDER BY rating DESC LIMIT 0 , 1"));
$starwebdesign = mysql_fetch_array(mysql_query("SELECT title, rating FROM webdesign ORDER BY rating DESC LIMIT 0 , 1"));
$starphotography = mysql_fetch_array(mysql_query("SELECT title, rating FROM photography ORDER BY rating DESC LIMIT 0 , 1"));
$starskins = mysql_fetch_array(mysql_query("SELECT title, rating FROM skins ORDER BY rating DESC LIMIT 0 , 1"));

$star_array = array(
$stardesign['title'] => $stardesign['rating'],
$starwebdesign['title'] => $starwebdesign['rating'],
$starphotography['title'] => $starphotography['rating'],
$starskins['title'] => $starskins['rating']
);
array_multisort($star_array, SORT_DESC, SORT_NUMERIC);
foreach($star_array as $key => $val) { echo "$key => $val<br />"; }

Só que a última parte, a do foreach não era bem isso que queria, porque queria que aparecesse apenas o que tivesse maior valor de rating. Alguma ajuda?  :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

experimenta isto:

$quuery = mysql_query("select title, max(rating) as maximo_rating from webdesign order by title");

deve funcionar.

cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tu queres o maior valor de rating de cada query (design, webdesign, photography, skins) ou queres o maior valor de todos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tu queres o maior valor de rating de cada query (design, webdesign, photography, skins) ou queres o maior valor de todos?

Pelo que eu percebi é o maior valor de todos :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, é o maior valor de todos.

@ DRKaQUiLa: Se essa query funcionar, vai apenas selecionar o maior de cada tabela, mas e depois?!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas. Mas tu não keres o maior valor de cada tabela?? ou seja o maior rating para apresentares??

Mas depois como?? tas a falar de como mostrar os valores?? se for isso fazes da mesma forma que tas a fazer, ou entao como eu faço, assim:

while($resultado = mysql_fetch_array(mysql_query("select title, max(rating) as maximo_rating from webdesign order by title")))
{

echo "Titulo do trabalho: ".$resultado['maximo_ranking'];

}

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como se pode ver no meu script, o que quero é pesquisar nas tabelas design, webdesign, photography e skins o valor mais alto de rating e o respectivo nome:

$stardesign = mysql_fetch_array(mysql_query("SELECT title, rating FROM design ORDER BY rating DESC LIMIT 0 , 1"));
$starwebdesign = mysql_fetch_array(mysql_query("SELECT title, rating FROM webdesign ORDER BY rating DESC LIMIT 0 , 1"));
$starphotography = mysql_fetch_array(mysql_query("SELECT title, rating FROM photography ORDER BY rating DESC LIMIT 0 , 1"));
$starskins = mysql_fetch_array(mysql_query("SELECT title, rating FROM skins ORDER BY rating DESC LIMIT 0 , 1"));

E dentro destas quatro "artworks", escolher apenas a que tiver maior valor de rating e mostrar o seu nome e o rating.

Mas como a última parte não sei bem como fazer, fiz desta maneira:

$star_array = array(
$stardesign['title'] => $stardesign['rating'],
$starwebdesign['title'] => $starwebdesign['rating'],
$starphotography['title'] => $starphotography['rating'],
$starskins['title'] => $starskins['rating']
);
array_multisort($star_array, SORT_DESC, SORT_NUMERIC);
foreach($star_array as $key => $val) { echo "$key => $val<br />"; }

Construir uma array ($star_array) com as quatro artworks, e ordená-las por ordem decrescente de rating através do array_multisort.

Mas isto mostra todas as 4 artworks, gostava que me ajudassem a arranjar uma maneira de mostrar apenas o nome e rating da artwork de maior valor de rating (o primeiro registo que provém do array_multisort()).

Mais alguma dúvida digam  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que me aparece:

Design Lab 3.0 => 5.00
The Wonderland => 4.01
Raining out There => 4.00

Até aparece correcto, mas queria uma forma de aparecer apenas o primeiro. Neste caso o Design Lab 3.0 (5.00)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

posso estar enganado, mas para o que queres fazer basta que, em vez do foreach, mostres só os valores do 1º indice do star_array, visto que já foi ordenado como pretendes pelo array_multisort e o 1º é o de valor mais alto...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
$i=0;
foreach($star_array as $key => $val) {
if($i>0) break;
echo "$key => $val<br />";
$i++;
}

Um método pouco ortodoxo :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora