За последние 24 часа нас посетили 93084 программиста и 5637 роботов. Сейчас ищут 2265 программистов ...

Нужна помощь

Тема в разделе "Сделайте за меня", создана пользователем Неугомонный, 1 сен 2023.

  1. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Всем привет , сделайте за меня :). Если без приколов ещё ума не хватает самому писать , что-то с do while крутися в голове да и крутися :rolleyes: если можно без do-while давайте )), как сделать так чтобы , если в базе данных уже существует такое число происходила генерация нового числа до тех пор пока не будет найдено свободное , после чего свободное число добавлялось в бд, и только после этого уже происходила переадресация
    PHP:
    1. $i = rand(1,1000);
    2. mysqli_query($mysqli, "INSERT IGNORE INTO `".PREFIX."_test` SET `rand` = '".$i."'");
    3. header('Location: m/test.php');
     
    #1 Неугомонный, 1 сен 2023
    Последнее редактирование: 1 сен 2023
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    MySQL :: MySQL 8.0 Reference Manual :: 12.15 Information Functions
    Пример после "Use the table to generate sequence numbers like this:"
    Код (SQL):
    1. UPDATE SEQUENCE SET id=LAST_INSERT_ID(id+1);
    2. SELECT LAST_INSERT_ID();
     
  3. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    @Неугомонный, что хочется, примерно понятно, можешь ответить на вопрос "Зачем?".
     
  4. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    В общем , если запись существует с таким значением в бд нужно чтобы была не ошибка, а генерировалась новое число/строка уникальное рандомное до тех пор пока не найдется свободное, после того как успешно добавлена запись была переадресация на мне нужную страницу .
    Опыта ещё мало написать сам не могу :mad:
     
  5. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    INSERT/ON UPDATE какой-нить почитай доки
     
  6. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Если про это, INSERT ON DUPLICATE KEY UPDATE . Тогда выходит если у тебя число такое как у меня , ты вылетаешь я остаюсь )), и вот из этого начинаются, админ почему меня выкинуло )))

    Приходит какой-то Ванька совпадает число, и я тоже вылетаю
    В условие я тоже поместить могу insert ignore чтобы была ошибка, в голове крутиться через while но как бы опыт не большой в программирование сложные конструкции ещё строить не могу
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    PHP:
    1. $maxIterationsLimit = 1000;
    2.  
    3. $iteration = 0;
    4.  
    5. $stmt = $mysqli -> prepare( 'SELECT `id` FROM `table` WHERE `rand` = ?' );
    6.  
    7. $stmt -> bind_param( 'i', $rand );
    8.  
    9. while ( true )
    10. {
    11.     if ( $iteration >= $maxIterationsLimit )
    12.     {
    13.         throw new \RangeException( 'Превышен максимальный лимит итераций' );
    14.     }
    15.    
    16.     $rand = mt_rand ( 1, $maxIterationsLimit );
    17.    
    18.     $stmt -> execute();
    19.    
    20.     $stmt -> store_result();
    21.    
    22.     if ( $stmt -> num_rows )
    23.     {
    24.         break;
    25.     }
    26.    
    27.     $iteration++;
    28. }
    29.  
    30. $stmt -> close();
    31.  
    32.  
    33. ... INSERT $rand
     
  8. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Сделать выборку если существует пересоздать число , после чего вставить в бд и́ сделать переадресацию?
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    с вас 1000 руб
     
    don.bidon нравится это.
  10. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    @MouseZver, отпиши, если дождался платежа )))
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Это хрень. В худшем случае нужно будет все записи обойти. Делай уникальность на основе автоинкремента. Если нужен рандом, объединяй рандомную часть с автоинкрементальной («на лету» или в отдельном поле).