• Как сочитать COUNT с where in?

    @RizyaRU
    Если нужно только 2 значения, возможно удобней будет работать с таким результатом:
    SELECT 
    (SELECT COUNT(`id`) FROM `products` WHERE `category_id` = 34) AS `count1`, 
    (SELECT COUNT(`id`) FROM `products` WHERE `category_id` = 35) AS `count2`;


    +--------+---------+
    | count1 | count2 |
    +--------+---------+
    | 154 | 137 |
    +--------+---------+
    Ответ написан
    Комментировать
  • Как настроить изменение отступов при вставке кода?

    @RizyaRU Автор вопроса
    Решил проблему установкой этого дополнения
    https://marketplace.visualstudio.com/items?itemNam...
    Ответ написан
    Комментировать
  • Уровень изолированности REPEATABLE READ. Почему так происходит?

    @RizyaRU Автор вопроса
    Как оказалось SELECT вовсе не блокирует запись, и она может быть изменена другой транзакцией.

    Решение мне подсказали следующее:
    1. Обновить запись с нужным ID и статусом
    2. Проверить affected rows

    Как то так:
    <?php
    // buy.php пример
    ...
    $pdo->begintransaction();
    if (isset($product))
    {
    	$que = "UPDATE `shops` SET `status` = 'Продано' WHERE `id` = ? AND `status` = ''";
    	$pre = $pdo->prepare($que);
        $pre->execute([$product]);
    
    	if ($pre->rowCount())
    	{
    		// Товар куплен
    	}
    
    	else 
    	{
    		// Статус был изменен другой транзакцией, либо това не найден
    	}
    }
    $pdo->commit();
    ...
    ?>
    Ответ написан
  • Как сделать правильно группировку?

    @RizyaRU Автор вопроса
    Ну так вроде должно работать??

    SELECT * FROM `mails` 
    WHERE `id` IN (SELECT MAX(`id`) 
    		FROM `mails` 
    		GROUP BY `sender_id`) 
    AND `recipient_id`= 1
    Ответ написан
    Комментировать
  • Почему Mysql долго вычисляет COUNT?

    @RizyaRU
    1 row in set (0.00 sec) - ~30 000 000 записей

    SELECT 
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 12) AS `count_01`,	
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 123) AS `count_02`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 1234) AS `count_03`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 12345) AS `count_04`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 123456) AS `count_05`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 1234567) AS `count_06`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 7654321) AS `count_07`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 765432) AS `count_08`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 76543) AS `count_09`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 7654) AS `count_10`,    
    	(SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 765) AS `count_11`,    
        (SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 76) AS `count_12`



    8 rows in set (0.02 sec) - ~30 000 000 записей
    SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 543 
        UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 5443
            UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 34567
                UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 211567
                    UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 345688
                        UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 123356
                            UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 1433556
                                UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 2355464
                                	UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 566967
                                    	UNION SELECT COUNT(`id`) FROM `user_shmots` WHERE `user_id` = 123133
    Ответ написан
    Комментировать
  • Как отсортировать записи перед группировкой?

    @RizyaRU Автор вопроса
    Решил вопрос функцией MAX() получая корректную, для меня, дату.
    Ответ написан
    Комментировать