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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 71 72 73 74 75 76

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

Vladsvn

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

Всего записей: 342 | Зарегистр. 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
 
 
 
 

Всего записей: 342 | Зарегистр. 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';
 
не проверял.

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

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

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

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

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

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

Всего записей: 15099 | Зарегистр. 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 ?

Всего записей: 342 | Зарегистр. 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

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

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

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

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

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 13:21 21-03-2023 | Исправлено: Vladsvn, 14:17 21-03-2023
zagorisback



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

Цитата:
http://www.example.com/

 

Код:
link 2

 
   
 
 

Код:
$lks = trim($row['links']);
    
    echo count(explode("\r", $lks))

 
У меня есть это подсчет для ссылок
Возврат 3, неверно
это должно быть 2
Проблема, которая также вычисляет пространства

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 17:45 13-04-2023 | Исправлено: zagorisback, 17:45 13-04-2023
Mavrikii

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

Цитата:
Возврат 3, неверно
это должно быть 2

а содержимое $row['links'] показать? может там пустая строка есть или еще что?

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 18:55 13-04-2023
zagorisback



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

Код:
 
$lks = $row['links'];
    
    preg_match_all('#(\w*://|www\.)[a-z0-9]+(-+[a-z0-9]+)*(\.[a-z0-9]+(-+[a-z0-9]+)*)+(/([^\s()<>;]+\w)?/?)?#i', $lks, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
    
    echo '<font color="red">' . count($matches) . '</font>';
 

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 19:03 13-04-2023
zagorisback



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

как связать "минуты" с часами, минутами, секундами в одной строке?
пример:
 
122 - 2 hours and 2 minutes
 
132 - (director's cut) 2 hours and 12 minutes
 
 
   
 
 

Код:
 
 
preg_match_all('/\d+/', $row->duration, $resultime, PREG_PATTERN_ORDER);
      $resultime = $resultime[0];
    
    //var_dump($resultime);
    
    foreach ($resultime as $restime ){
 
    
        
        $t = $restime; // hours minutes
        $h = floor($t/60) ? floor($t/60) .' hours' : '';
        $m = $t%60 ? $t%60 .' minutes' : '';
        echo $h && $m ? $h.' and '.$m : $h.$m;
        
    }
 
 
 

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 19:06 14-04-2023 | Исправлено: zagorisback, 19:23 14-04-2023
Mavrikii

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

Цитата:
как связать "минуты" с часами, минутами, секундами в одной строке?

чем код написанный не устраивает?

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 22:07 14-04-2023
zagorisback



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

Цитата:
чем код написанный не устраивает?  

 
так
 
122 - 2 hours and 2 minutes
 
132 - (director's cut) 2 hours and 12 minutes  
 

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 22:51 14-04-2023
Mavrikii

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

Код:
        $h = floor($t/60) ? floor($t/60) . ' hours' : '';
        $m = $t%60 ? $t%60 . ' minutes' : '';
        echo $h && $m ? $h . ' and ' . $m : $h . $m;

как хотите, чтобы выглядело??

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 22:54 14-04-2023
zagorisback



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

Цитата:
что в этом коде не так?  

 
Код работает
 
Только я хочу так видеть
 
До
 
   
 
 
После
 
   
 

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 23:16 14-04-2023
Mavrikii

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

Цитата:
Только я хочу так видеть

ну так используйте его там, где выводите остальное.
в приведенном вами куске НЕТ вывода цифры и (director's cut), как я могу догадаться что у вас уже реализовано??
вывели нужную строку, после нее, без переноса, без блочного элемента, выводите время куском выше.

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 23:18 14-04-2023
Anny27

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день, коллеги! Помогите или направьте,куда отправить вопрос.
Есть облачный сервис, сайт, вход туда по логину и паролю.
Как через командную строку оставить вход на облачный сервис только по одном логину и паролю, а для других логинов доступ заблокировать?
Ну, например, сайт СберБизнес, вход туда только по логину и паролю. Все остальные входы по логину надо заблокировать.  
Сотрудники стали злоупотреблять доверием, порка не помогает, увольнение не вариант, остается только блок.
 
Спасибо!

Всего записей: 17 | Зарегистр. 08-06-2021 | Отправлено: 02:07 25-04-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Anny27
при чем тут данный раздел и эта тема? или в первую попавшуюся запостили?
 

Цитата:
Как через командную строку оставить вход на облачный сервис только по одном логину и паролю, а для других логинов доступ заблокировать?
Ну, например, сайт СберБизнес, вход туда только по логину и паролю. Все остальные входы по логину надо заблокировать.

откуда мы знаем о чем вообще идет речь?

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 02:19 25-04-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 71 72 73 74 75 76

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru