Problema con tabla y SELECT

  • Autor Autor cooply
  • Fecha de inicio Fecha de inicio
C

cooply

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Muy buenas a todos,

Temgo este codigo

PHP:
$tops = $db->QueryFetchArrayAll("SELECT uid, SUM(`today_clicks`) AS `today_clicks` FROM `user_clicks` GROUP BY uid ORDER BY `today_clicks` DESC LIMIT 10");


<? 
$j = 0;

foreach( $tops as $top ) {
$j++;

	$user = $db->QueryFetchArray("SELECT id,login FROM `users` WHERE `id`='".$top['uid']."'");
?>	
					<tr>
						<td ><?=$j?></td>
						<td><a href="index.php?x=users&edit=<?=$user['id']?>"><?=$user['login']?></a></td>
                        <td><b><?=number_format($top['today_clicks'])?></b></td>

                       <td><?=number_format($top['today_clicks'])+15;?> monedas </td>
					</tr><? } ?>


Y me da resultado una tabla así,

Sin título.webp

Lo que quiero hacer que en la columna de premios solo aparezcan los 3 primeros resultados, los demas que no aparezcan,
Lo he probado de mil formas y no se me ocurre nada, espero que alguien pueda ayudarme, un saludo y mil gracias por todo.
 
No entendi si quieres solo mostrar los primeros 3 o que a los primeros 3 solo se les muestre una de las columnas, en el caso primero basta con un limit en el sql, para el segundo podrías hacer un contador que si es un valor entre 0 y 2 mitre dicho valor, y si s 3 o mas no lo muestre
 
Muy buenas [MENTION=19531]Voldemorth[/MENTION] me refiero a las 2 opción, es decir que en la columna "premios" solo salga 68, 55 y 48, las demas que salgan en blanco o con un guión,
Podrias darme algo mas de información acerca del contador?, lo hago en php, o js o alguna otra forma, lo siento pero estoy un poco perdido en esto.

Gracias por ayudarme.
 
Intenta, en vez de <?=number_format($top['today_clicks'])+15;?> monedas, esto:

PHP:
<?php
$numero = 0;
if ($numero < 3){
$numero++;
echo number_format($top['today_clicks'])+15;
} else {
echo '-';
}
?>
 
Gracias por contestar [MENTION=81006]kanikase[/MENTION] pero no consigo que funcione así, siento dar tanto la lata, pero sigo sin conseguirlo..
he probado a cambiar $numero por $top y $today_clicks y tampco.

Un saludo y gracias.
 
Gracias por contestar [MENTION=81006]kanikase[/MENTION] pero no consigo que funcione así, siento dar tanto la lata, pero sigo sin conseguirlo..
he probado a cambiar $numero por $top y $today_clicks y tampco.

Un saludo y gracias.

Qué pasa con el código que te di?
 
Muestra la tabla exactamente igual, no varia ni salen los -
 
Me referia a exactamente lo que dice [MENTION=81006]kanikase[/MENTION], el código (sirviéndome de su ejemplo) tendría que quedar así:

PHP:
$tops = $db->QueryFetchArrayAll("SELECT uid, SUM(`today_clicks`) AS `today_clicks` FROM `user_clicks` GROUP BY uid ORDER BY `today_clicks` DESC LIMIT 10");


<? 
$j = 0;

foreach( $tops as $top ) {
$j++;

    $user = $db->QueryFetchArray("SELECT id,login FROM `users` WHERE `id`='".$top['uid']."'");
?>    
                    <tr>
                        <td ><?=$j?></td>
                        <td><a href="index.php?x=users&edit=<?=$user['id']?>"><?=$user['login']?></a></td>
                        <td><b><?=number_format($top['today_clicks'])?></b></td>

                       <td><? $numero = 0;
							if ($numero < 3){
							$numero++;
							echo number_format($top['today_clicks'])+15;
							} else {
							echo '-';
							} ?> monedas </td>
                    </tr><? } ?>
La idea es que numero es la cantidad de veces que se imprime el valor de la ultima columna, es decir, en 0 (al comenzar) aun no se a impreso nada en esa columna, luego se imprime y aumenta el valor, así hasta 3 cuando deja de cumplir la condición de que numero sea menor a 3 y solo imprime un guión.
 
Nada.. nose que puede estar pasando..
El codigo completo es este
PHP:
<? include('header.php'); 

$tops = $db->QueryFetchArrayAll("SELECT uid, SUM(`today_clicks`) AS `today_clicks` FROM `user_clicks` GROUP BY uid ORDER BY `today_clicks` DESC LIMIT 10");

?>
<div class="content">
<div class="page">
    <h2 class="title">Top Usuarios Hoy</h2>

<section id="content" class="container_12 clearfix ui-sortable" data-sort=true>
	<div class="grid_12">
		<div class="box">
			<table>
				<thead>
					<tr style="background-color:blue;">
						<th>#</th>
						<th>Usuario</th>
                        <th>Intercambios hoy</th>
                        <th>Premio</th>
					</tr>
				</thead>
				<tbody style="border:black; padding: 8px;line-height: 20px;text-align: left;vertical-align: top;border-top: 1px solid #DDD;">
<? 
$j = 0;

foreach( $tops as $top ) {
$j++;

    $user = $db->QueryFetchArray("SELECT id,login FROM `users` WHERE `id`='".$top['uid']."'");
?>    
                    <tr>
                        <td ><?=$j?></td>
                        <td><a href="index.php?x=users&edit=<?=$user['id']?>"><?=$user['login']?></a></td>
                        <td><b><?=number_format($top['today_clicks'])?></b></td>

                       <td><? $numero = 0;
                            if ($numero < 3){
                            $numero++;
                            number_format($top['today_clicks'])+15;
                            } else {
                            echo '-';
                            } ?> monedas </td>
                    </tr><? } ?>

				</tbody>
			</table>
		</div>
	</div>
</section>
	 </div>
</div>

<? // include('foter.php');?>

Lo coloca tal cual lo tengo ahora mismo.. y sigue sin cambiar nada, me muestra toda la columna completa como la primera imagen que subí.
 
Nada.. nose que puede estar pasando..
El codigo completo es este
PHP:
<? include('header.php'); 

$tops = $db->QueryFetchArrayAll("SELECT uid, SUM(`today_clicks`) AS `today_clicks` FROM `user_clicks` GROUP BY uid ORDER BY `today_clicks` DESC LIMIT 10");

?>
<div class="content">
<div class="page">
    <h2 class="title">Top Usuarios Hoy</h2>

<section id="content" class="container_12 clearfix ui-sortable" data-sort=true>
	<div class="grid_12">
		<div class="box">
			<table>
				<thead>
					<tr style="background-color:blue;">
						<th>#</th>
						<th>Usuario</th>
                        <th>Intercambios hoy</th>
                        <th>Premio</th>
					</tr>
				</thead>
				<tbody style="border:black; padding: 8px;line-height: 20px;text-align: left;vertical-align: top;border-top: 1px solid #DDD;">
<? 
$j = 0;

foreach( $tops as $top ) {
$j++;

    $user = $db->QueryFetchArray("SELECT id,login FROM `users` WHERE `id`='".$top['uid']."'");
?>    
                    <tr>
                        <td ><?=$j?></td>
                        <td><a rel="nofollow" href="index.php?x=users&edit=<?=$user['id']?>"><?=$user['login']?></a></td>
                        <td><b><?=number_format($top['today_clicks'])?></b></td>

                       <td><? $numero = 0;
                            if ($numero < 3){
                            $numero++;
                            number_format($top['today_clicks'])+15;
                            } else {
                            echo '-';
                            } ?> monedas </td>
                    </tr><? } ?>

				</tbody>
			</table>
		</div>
	</div>
</section>
	 </div>
</div>

<? // include('foter.php');?>

Lo coloca tal cual lo tengo ahora mismo.. y sigue sin cambiar nada, me muestra toda la columna completa como la primera imagen que subí.

te falta un echo :drunk:

- - - Actualizado - - -

PHP:
<? include('header.php'); 

$tops = $db->QueryFetchArrayAll("SELECT uid, SUM(`today_clicks`) AS `today_clicks` FROM `user_clicks` GROUP BY uid ORDER BY `today_clicks` DESC LIMIT 10");

?>
<div class="content">
<div class="page">
    <h2 class="title">Top Usuarios Hoy</h2>

<section id="content" class="container_12 clearfix ui-sortable" data-sort=true>
    <div class="grid_12">
        <div class="box">
            <table>
                <thead>
                    <tr style="background-color:blue;">
                        <th>#</th>
                        <th>Usuario</th>
                        <th>Intercambios hoy</th>
                        <th>Premio</th>
                    </tr>
                </thead>
                <tbody style="border:black; padding: 8px;line-height: 20px;text-align: left;vertical-align: top;border-top: 1px solid #DDD;">
<? 
$j = 0;

foreach( $tops as $top ) {
$j++;

    $user = $db->QueryFetchArray("SELECT id,login FROM `users` WHERE `id`='".$top['uid']."'");
?>    
                    <tr>
                        <td ><?=$j?></td>
                        <td><a rel="nofollow" href="index.php?x=users&edit=<?=$user['id']?>"><?=$user['login']?></a></td>
                        <td><b><?=number_format($top['today_clicks'])?></b></td>

                       <td><? $numero = 0;
                            if ($numero < 3){
                            $numero++;
                            echo number_format($top['today_clicks'])+15;
                            } else {
                            echo '-';
                            } ?> monedas </td>
                    </tr><? } ?>

                </tbody>
            </table>
        </div>
    </div>
</section>
     </div>
</div>

<? // include('foter.php');?>
 
estaba escribiendo justo eso, jajajaja
 
Nada... codigo copiado y pegado y sigue sin funcionar, no me da ningun error ni muestra nada diferente... 😕😕
 
no muestra nada diferente???
Seguro que estas cambiando el archivo en el servidor??? digo que estas remplazando y actualizando el navegador para que se noten los posibles cambios?
 
Algo estás haciendo mal, el código funciona :encouragement:

Captura.webp
 
Si.. cuando habeis dicho que faltaba el echo, los espacios salian en blanco, es decir solo mostraba "monedas", pero ahora muestra todas las monedas de nuevo..
 
:/ intenta con esto:
PHP:
<? include('header.php'); 

$tops = $db->QueryFetchArrayAll("SELECT uid, SUM(`today_clicks`) AS `today_clicks` FROM `user_clicks` GROUP BY uid ORDER BY `today_clicks` DESC LIMIT 10");

?>
<div class="content">
<div class="page">
    <h2 class="title">Top Usuarios Hoy</h2>

<section id="content" class="container_12 clearfix ui-sortable" data-sort=true>
    <div class="grid_12">
        <div class="box">
            <table>
                <thead>
                    <tr style="background-color:blue;">
                        <th>#</th>
                        <th>Usuario</th>
                        <th>Intercambios hoy</th>
                        <th>Premio</th>
                    </tr>
                </thead>
                <tbody style="border:black; padding: 8px;line-height: 20px;text-align: left;vertical-align: top;border-top: 1px solid #DDD;">
<? 
$j = 0;

foreach( $tops as $top ) {
$j++;

    $user = $db->QueryFetchArray("SELECT id,login FROM `users` WHERE `id`='".$top['uid']."'");
?>    
                    <tr>
                        <td ><?=$j?></td>
                        <td><a rel="nofollow" href="index.php?x=users&edit=<?=$user['id']?>"><?=$user['login']?></a></td>
                        <td><b><?=number_format($top['today_clicks'])?></b></td>

                       <td><? $numero = 0;
                            if ($numero < 3){
                            $numero = $numero+1;
                            echo number_format($top['today_clicks'])+15;
                            } else {
                            echo '-';
                            } ?> monedas </td>
                    </tr><? } ?>

                </tbody>
            </table>
        </div>
    </div>
</section>
     </div>
</div>

<? // include('foter.php');?>
 
Tampoco.. :drunk::drunk::drunk::drunk:

Sigo probando cosas aver.. pero esque no consigo que salga ni aun borrando parte del codigo..

- - - Actualizado - - -

Siento ser tan pesado pero esque sin vosotros no lo consigo jamas.

He añadido esta linea

PHP:
<td><? $numero = 0;
                            if ($numero < 3){
                            $numero++;
                            echo $numero;
                            } else {
                            echo '-';
                            } ?> monedas </td>
                    </tr>

debajo del ultimo </td>

Y me crea otra columna así

1
1
1
1
1
1
1
1

Sigue sin hacer

68
55
48

Pero nose si eso tendrá algo que decir respecto al SELECT o algo..

Gracias por la ayuda.

- - - Actualizado - - -

Bueno lo dejo apartado porque no consigo hacerlo, si en algun momento lo llego a acabar subire el codigo por si a alguien le hiciera falta.

Un saludo a todos y gracias por ayudarme kanikase y voldemorth

- - - Actualizado - - -
[MENTION=19531]Voldemorth[/MENTION] [MENTION=81006]kanikase[/MENTION] acabo de encontrar el problema.

Aunque parezca mentira lo unico que he cambiado para que funciones es:

PHP:
<td><? $numero = 0;
Por
PHP:
$numero == 0;

Espero que sirva para futuros novatos como yo.
Un saludo y muchisimas gracias por ser tan amables y ayudarme, gracias a los dos :encouragement:
 
No se si ya lo resolviste, pero solo cambia a 3 el LIMIT

DESC LIMIT 3

Saludos
 
Atrás
Arriba