За последние 24 часа нас посетили 17598 программистов и 1652 робота. Сейчас ищет 881 программист ...

Уникальное значение бд

Тема в разделе "PHP для новичков", создана пользователем Klin, 23 июл 2010.

  1. Klin

    Klin Активный пользователь

    С нами с:
    15 май 2008
    Сообщения:
    82
    Симпатии:
    0
    Если какие-нибудь функции на уникальность значение.
    Например у меня есть 2 колонки id , num
    PHP:
    1.  
    2. <?php
    3.  
    4.     function test(){
    5.         $num = rand(1,99999);
    6.         $query = "SELECT `num` FROM `table` WHERE `num`='"$num"' LIMIT 1";
    7.         $res = mysql_query($query) or die(mysql_error);
    8.          if(mysql_num_rows($res)>0){
    9.              test();
    10.          }
    11.          else{
    12.              $query = (INSERT INTO................);
    13.              $res = mysql_query($query) or die(mysql_error());
    14.              if($res){
    15.                  return true;
    16.              }
    17.              else{
    18.                  return false;
    19.              }
    20.          }
    21.     }
    22. ?>
    23.  
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    по моему лучше делать order by rand или order by limit rand ммм id primary key и auto incremet должен быть, он и так уникальный... как выбрать уникальные значения замечательно гуглится
     
  3. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    есть еще флаг UNIQUE кроме автоикремента.
     
  4. Klin

    Klin Активный пользователь

    С нами с:
    15 май 2008
    Сообщения:
    82
    Симпатии:
    0
    ORDER BY RAND если я не ошибаюсь, выборка случайных таблиц, а мне надо проверить есть ли запись в таблице если есть выбрать другое рандомное число и опять проверить если нету записать. Id auto incremet мне не подходит так как я записую в этой колонки юзеров которые нажали на маю кнопочку на сайте.

    Обьясню свою задачу которую решаю)
    Я делаю так сказать лотерейку, юзер нажимает у меня кнопочку на сайте и ему рандомно выдается билет, я в id записываю юзера которому попался билет выдавшийся рандомно скриптом) в num номер билета, после розыгрыша буду чистить таблицу.
     
  5. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    строк.

    select count(*) from table where id = $Id

    чем не угодил?
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
  7. Klin

    Klin Активный пользователь

    С нами с:
    15 май 2008
    Сообщения:
    82
    Симпатии:
    0
    Да меня все устраевает, только меня волнует если такой поиск будет проводится в 10000 строк, то это очень сильно нагрузит сайт(хотя я не расчитую на такое), мне просто интересует может есть специальная функция которая предназначена для эффективного поиска).

    я видимо неправильно задал вопрос, попробую перефразировать)
    Есть ли функция для быстрого поиска строки в mysql и вывода результата(типо есть такая строка или нет)?

    Я так понимаю SELECT это выборка?
     
  8. `p r o x y

    `p r o x y Активный пользователь

    С нами с:
    21 июл 2010
    Сообщения:
    32
    Симпатии:
    0
    Klin
    Да, именно.

    Правильно написал phpdude. Примерно так:

    PHP:
    1. function test(){
    2.          $num = rand(1,99999);
    3.          $query = "SELECT count(*) FROM `table` WHERE `num`='$num'";
    4.          $res = mysql_query($query) or die(mysql_error);
    5.          if( $res>0){
    6.              test();
    7.          }
    8.          else{
    9.              $query = (INSERT INTO................);
    10.              $res = mysql_query($query) or die(mysql_error());
    11.              if($res){
    12.                  return true;
    13.              }
    14.              else{
    15.                  return false;
    16.              }
    17.          }
    18.      }