SELECT COUNT(*), GROUP_CONCAT(`t1`.`user_id` SEPARATOR ',')
FROM `table` AS `t1`
JOIN `table` AS `t2` ON `t2`.`user_id` = `t1`.`user_id`
AND `t1`.`visit_date` = :date1
AND `t2`.`visit_date` = :date2
SELECT `s`.`id`, `s`.`name`
FROM `shops` AS `s`
JOIN `residues` AS `r1`
ON `r1`.`shop_id` = `s`.`id` AND `r1`.`good_id` = 1 AND `r1`.`quantity` >= 2
JOIN `residues` AS `r2`
ON `r2`.`shop_id` = `s`.`id` AND `r2`.`good_id` = 5 AND `r2`.`quantity` >= 1
ORDER BY `r1`.`price`*2+`r2`.`price*1