За последние 24 часа нас посетили 49885 программистов и 1730 роботов. Сейчас ищут 658 программистов ...

Вытащить рандомную строку по условию

Тема в разделе "PHP и базы данных", создана пользователем Stairdeck, 14 май 2015.

  1. Stairdeck

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

    С нами с:
    9 ноя 2014
    Сообщения:
    47
    Симпатии:
    0
    Адрес:
    Россия
    Здравствуйте!

    Вот такая ситуация, мне нужно вытащить одну строку, по условию.
    Вот кусок кода который это делает, но не совсем:
    Код (Text):
    1. $query = mysql_query("SELECT adv_id FROM advert WHERE adv_shwavlb > '0' LIMIT 1");
    В бд 3 строки, которые соответствуют запросу, НО вытаскивает он только одну, первую по счету.

    Можно ли сделать так, чтобы он рандомную строку вытаскивал из соответствующих по условию?
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    можно, но запрос будет выглядеть длиннее :)
     
  3. Stairdeck

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

    С нами с:
    9 ноя 2014
    Сообщения:
    47
    Симпатии:
    0
    Адрес:
    Россия
    Этим я пожертвую, как можно?
     
  4. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    я лишь могу направить куда копать, а остальное придется самому :)
     
  5. Stairdeck

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

    С нами с:
    9 ноя 2014
    Сообщения:
    47
    Симпатии:
    0
    Адрес:
    Россия
    И на том спасибо скажу
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В лоб и медленно ORDER BY RAND()
     
  7. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    у этого примера есть некоторые недостатки...

    вот пример в связке с пхп
    Код (Text):
    1.  
    2. $result = mysql_query('SELECT MAX(id) FROM table');
    3. $max_id = mysql_result($result, 0);
    4.  
    5. $random_id = mt_rand(1, $max_id);
    6.  
    7. $row = mysql_query('SELECT * FROM table WHERE id = '.$random_id);
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    p@R@dox 55RU а если в диапазоне id будут пробелы? Скажем были записи 1 2 3 4 5 6 7 8 9 и записи 3 4 5 6 удалили?
     
  9. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    эт уже у автора надо узнавать, будут ли такие записи..
     
  10. Stairdeck

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

    С нами с:
    9 ноя 2014
    Сообщения:
    47
    Симпатии:
    0
    Адрес:
    Россия
    Вообще я это предусмотрел, и сделаю так, чтобы пробелов не было. Но опять же из за этого мне и нужен будет отбор по условию
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Stairdeck так делай отбор по условию и случайную строку бери одновременно
     
  12. Stairdeck

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

    С нами с:
    9 ноя 2014
    Сообщения:
    47
    Симпатии:
    0
    Адрес:
    Россия
    Код (Text):
    1. $query = mysql_query("SELECT adv_id FROM advert WHERE adv_shwavlb > '0' ORDER BY RAND() LIMIT 1");
    2. $a = mysql_result($query, 0);
    Я правильно понял?
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Stairdeck работает?
     
  14. Stairdeck

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

    С нами с:
    9 ноя 2014
    Сообщения:
    47
    Симпатии:
    0
    Адрес:
    Россия
    Конечно, но производительно ли это?
    Весь интернет пестрит тем, как это глупо.
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  16. Stairdeck

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

    С нами с:
    9 ноя 2014
    Сообщения:
    47
    Симпатии:
    0
    Адрес:
    Россия
    Тут просто рандомны. Не подойдёт, надо по условию. Эээээх(