Obteniendo resultados segun mayores cantidades

Iniciado por mark182, 30 Marzo 2016, 05:04 AM

0 Miembros y 1 Visitante están viendo este tema.

mark182

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:

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:

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.

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

mark182

No me funciono. La consulta la arme asi:


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:

+----+----------+----------------+---------------+------------+
| 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.