Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: mark182 en 30 Marzo 2016, 05:04



Título: Obteniendo resultados segun mayores cantidades
Publicado por: mark182 en 30 Marzo 2016, 05:04
Buenas gente! como estan?

Estoy haciendo un sitio donde los usuarios tienen un campo donde se acumulan los "seguidores" del usuario (en la tabla se llama followersCount).

Por otra parte, el usuario publica productos, y estos productos, tienen un campo contador donde acumulo "likes" del producto (en la tabla se llama likesCount).

Ahora bien, las tablas users y products ya estan relacionadas. Lo que quiero hacer es, traer los primero 6 usuarios (en orden desc), que:

* Tienen la mayor cantidad de productos
* Sus productos tienen la mayor cantidad de likes.
* Y tienen la mayor cantidad de seguidores.

En ese orden de prioridad. Para yo poder mostra: "UsuarioA tiene X cantidad de productos, sus productos tienen X likes en total y este usuario tiene X seguidores."

Les muestro las tablas:

Tabla Users:
Código:
mysql> describe users;
+-------------------+------------------+------+-----+---------------------+----------------+
| Field             | Type             | Null | Key | Default             | Extra          |
+-------------------+------------------+------+-----+---------------------+----------------+
| id                | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| username          | varchar(255)     | NO   |     | NULL                |                |
| email             | varchar(255)     | NO   | UNI | NULL                |                |
| password          | varchar(60)      | NO   |     | NULL                |                |
| followersCount    | bigint(20)       | NO   |     | NULL                |                |
+-------------------+------------------+------+-----+---------------------+----------------+

Tabla Products:
Código:
mysql> describe products;
+---------------+------------------+------+-----+---------------------+----------------+
| Field         | Type             | Null | Key | Default             | Extra          |
+---------------+------------------+------+-----+---------------------+----------------+
| id            | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| name          | varchar(35)      | NO   |     | NULL                |                |
| price         | decimal(20,2)    | NO   |     | NULL                |                |
| lovesCount    | bigint(20)       | NO   |     | NULL                |                |
| user_id       | int(10) unsigned | NO   | MUL | NULL                |                |
+---------------+------------------+------+-----+---------------------+----------------+

Espero que me puedan ayudar ya que no soy muy bueno en BD.

Muchisimas gracias!
Saludos.


Título: Re: Obteniendo resultados segun mayores cantidades
Publicado por: engel lex en 30 Marzo 2016, 05:58
lo puedes hacer con un join, simplemente join a las 2 tablas por id de usuario y user_id de productos, ordenas por lo que quieras y limitas a 6


Título: Re: Obteniendo resultados segun mayores cantidades
Publicado por: mark182 en 30 Marzo 2016, 16:35
No me funciono. La consulta la arme asi:

Código:
SELECT `users`.`id`, `users`.`username`, `users`.`followersCount`, count(products.id) as productsCount, `products`.`lovesCount`
FROM `users`
LEFT JOIN `products`
       ON `users`.`id` = `products`.`user_id`
ORDER BY `productsCount` desc, `products`.`lovesCount` desc, `users`.`followersCount` desc
LIMIT 6

Y el resultado fue este:
Código:
+----+----------+----------------+---------------+------------+
| id | username | followersCount | productsCount | lovesCount |
+----+----------+----------------+---------------+------------+
| 12 | usertest |              0 |             3 |          0 |
+----+----------+----------------+---------------+------------+
1 row in set (0,00 sec)

Como pueden ver, me trajo un solo resultado con la cantidad de productos existentes, pero no diferenciandolos por el usuario que lo publico.