Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySql/PHP: общие вопросы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

Открыть новую тему     Написать ответ в эту тему

Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Очень круто получилось! Спасибо!

Всего записей: 286 | Зарегистр. 07-09-2016 | Отправлено: 10:44 16-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
DELETE FROM tablename WHERE id_записи NOT IN (SELECT id_записи FROM tablename WHERE ... LIMIT 30)
удалять все ID записей, что не будут выбраны в подзапросе.

 
К сожалению, так не получилось.
 
Вот полный код:
    $query = mysqli_query($db, "DELETE FROM `notice` WHERE `user_id` = '$user_id' NOT IN
    (SELECT `id` FROM `notice` WHERE `user_id` = '$user_id' ORDER BY `time` DESC LIMIT 5)");
 
Поскольку исполняемый РНР файл вызывается скриптом, для диагностики я сделал так:
    $err = mysqli_error($db);
    file_put_contents('1.txt', $err);
 
Получаем сообщение:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
 
На сервере стоит MySQL:5.7.21-20-beget
 
 
 
 

Всего записей: 286 | Зарегистр. 07-09-2016 | Отправлено: 19:08 19-03-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
`user_id` = '$user_id' NOT IN

с чего бы??
WHERE `id` NOT IN
 

Цитата:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

версия MySQL, которая не поддерживает LIMIT в подзапросах.
 
хорошо, LIMIT можно вытащить за пределы подзапроса
DELETE FROM `notice` WHERE `id` NOT IN
(SELECT `id` FROM `notice` WHERE `user_id` = '$user_id' ORDER BY `time` DESC)
LIMIT 5

хотя нет, смысл меняется.. не пойдет. через join нужно. что то такое..
 
 
DELETE n1 FROM `notice` n1
LEFT JOIN  
(SELECT id FROM `notice` WHERE `user_id` = '$user_id' ORDER BY `time` DESC LIMIT 5) n2 USING(id)  
WHERE n2.id IS NULL AND n1.`user_id` = '$user_id';
 
не проверял.

Всего записей: 13961 | Зарегистр. 20-09-2014 | Отправлено: 22:26 19-03-2023 | Исправлено: Mavrikii, 22:38 19-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тогда с помощью двух запросов: сначала найти минимальный time для данного LIMIT, а потом удалить все меньшие time.

Всего записей: 286 | Зарегистр. 07-09-2016 | Отправлено: 22:51 19-03-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Тогда с помощью двух запросов: сначала найти минимальный time для данного LIMIT, а потом удалить все меньшие time

может сработать то, что написал выше. ну либо как удобнее.

Всего записей: 13961 | Зарегистр. 20-09-2014 | Отправлено: 22:55 19-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется вот такой запрос:
 
$query = mysqli_query($db, "SELECT MIN(`time`) AS `min` FROM `notice`
WHERE `user_id` = '$user_id' ORDER BY `time` DESC LIMIT 5");
$row = mysqli_fetch_assoc($query);
$time_min = $row['min'];
 
Здесь я хотел для пользователя user_id отсортировать выборку по time по убыванию и из первых пяти строк найти минимальное значение time.
 
Но запрос игнорирует LIMIT 5 и выдает минимальное значение из всех записей для этого user_id.
 
Ради любопытства я заменил DESC на ASC, а результат тот же.
 
Что-то неверно в этом запросе или база данных так работает?
(Диагностических сообщений нет)
 
* *  *  
Попытался сделать запрос не по таблице, а по подзапросу. Вот так:
 
$query = mysqli_query($db, "SELECT MIN(`time`) FROM
(`notice` WHERE `user_id` = '$user_id' ORDER BY `time` DESC LIMIT 5) AS `min`");
        $row = mysqli_fetch_assoc($query);
        $time_min = $row['min'];
 
Выводит ошибку:
PHP Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in …
 
Сообщение относится к строке $row = mysqli_fetch_assoc($query);
 
* * *  
 
В PHPMyAdmin попробовал вот такой запрос, подставив в него вместо переменных их численное значение:
 
SELECT MIN(`time`) AS `min` FROM `notice` (SELECT `time` FROM `notice` WHERE `user_id` = 72 ORDER BY `time` DESC LIMIT 5)
 
Пишет Ошибка в запросе.  
 
Может быть, это находится за пределами возможности mysql ?

Всего записей: 286 | Зарегистр. 07-09-2016 | Отправлено: 17:43 20-03-2023 | Исправлено: Vladsvn, 22:07 20-03-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Выводит ошибку:
PHP Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in

потому что запрос криво написан, с ошибкой.
зачем там скобки внутри какие то??
 

Цитата:
Но запрос игнорирует LIMIT 5 и выдает минимальное значение из всех записей для этого user_id.

и будет игнорировать, потому что это ограничение на выборку результатов, а не выбор из общего для обработки MIN с ним.
 
вам нужно сначала подзапросом выбрать что хочется, а потом уже к нему применить MIN
SELECT MIN(*) FROM (SELECT time FROM `notice` WHERE `user_id` = '$user_id' ORDER BY `time` DESC LIMIT 5) t

Всего записей: 13961 | Зарегистр. 20-09-2014 | Отправлено: 22:08 20-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, это заработало!

Всего записей: 286 | Зарегистр. 07-09-2016 | Отправлено: 22:41 20-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблему удалось решить, поэтому вопрос удален.

Всего записей: 286 | Зарегистр. 07-09-2016 | Отправлено: 13:21 21-03-2023 | Исправлено: Vladsvn, 14:17 21-03-2023
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySql/PHP: общие вопросы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2023

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru