Vnepomuceno Posted December 16, 2006 at 04:32 PM Report #70846 Posted December 16, 2006 at 04:32 PM Arghhh, podem-me dar uma ajudinha com array's? ? É 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 😁
kingless Posted December 16, 2006 at 04:48 PM Report #70847 Posted December 16, 2006 at 04:48 PM 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>"; }
djthyrax Posted December 16, 2006 at 05:02 PM Report #70848 Posted December 16, 2006 at 05:02 PM 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. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Vnepomuceno Posted December 17, 2006 at 11:53 AM Author Report #70917 Posted December 17, 2006 at 11:53 AM Obrigado aos dois pela ajuda 🙂 O "script" do kingless é bem fácil de entender. Agora outro tipo de arrays 😄 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:
DRKaQUiLa Posted December 17, 2006 at 01:47 PM Report #70942 Posted December 17, 2006 at 01:47 PM experimenta isto: $quuery = mysql_query("select title, max(rating) as maximo_rating from webdesign order by title"); deve funcionar. cumps.
Guest id194 Posted December 17, 2006 at 03:28 PM Report #70961 Posted December 17, 2006 at 03:28 PM tu queres o maior valor de rating de cada query (design, webdesign, photography, skins) ou queres o maior valor de todos?
djthyrax Posted December 17, 2006 at 03:37 PM Report #70962 Posted December 17, 2006 at 03:37 PM 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 😄 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Vnepomuceno Posted December 17, 2006 at 03:41 PM Author Report #70963 Posted December 17, 2006 at 03:41 PM Sim, é o maior valor de todos. @ DRKaQUiLa: Se essa query funcionar, vai apenas selecionar o maior de cada tabela, mas e depois?!
DRKaQUiLa Posted December 17, 2006 at 03:44 PM Report #70964 Posted December 17, 2006 at 03:44 PM 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
Vnepomuceno Posted December 17, 2006 at 07:40 PM Author Report #70994 Posted December 17, 2006 at 07:40 PM 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 ?
djthyrax Posted December 17, 2006 at 07:45 PM Report #70997 Posted December 17, 2006 at 07:45 PM Qd fazes esse echo, qual é a key que te aparece para a mais alta? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Vnepomuceno Posted December 18, 2006 at 09:01 AM Author Report #71099 Posted December 18, 2006 at 09:01 AM 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)
marinheiro Posted December 18, 2006 at 11:28 AM Report #71123 Posted December 18, 2006 at 11:28 AM 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... há 10 tipos de pessoas: as que sabem binário e as que não sabem... todas as nossas vidas não passam de release candidates... com o aperfeiçoamento, um dia chegaremos à versão final..
Vnepomuceno Posted December 18, 2006 at 12:02 PM Author Report #71137 Posted December 18, 2006 at 12:02 PM E como faço isso de modo a poder mostrar o 'nome' e 'rating'?
djthyrax Posted December 18, 2006 at 03:47 PM Report #71199 Posted December 18, 2006 at 03:47 PM $i=0; foreach($star_array as $key => $val) { if($i>0) break; echo "$key => $val<br />"; $i++; } Um método pouco ortodoxo 😛 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now