Ничего не нужно доставать из БД. Бери последовательно. Никакого рандома в этом плане делать не нужно.
Ну если такая необходимость у вас есть... Два выхода, либо реально рандомно делать, либо же вытаскивать по порядку. делаете запрос в бд, спрашиваете у бд, сколько у тебя записей в нужной тебе таблице. Он отвечает, у меня тут 100 записей (счёт идёт на ID). Ты, прокручиваешь тут функцию rand(1 , 100); Code rand(1 , 100); Делаешь снова запрос, и указываешь уже то число из rand , всё. Каждый раз разные значения. Только я не гарантирую их повтор. Если нужно идти на метод исключения, то есть просто убирать каждые выведенные значения, скрипт будет намного больше этого. UPD: если же у вас записи в таблице удаляются, мол идёт 2, 10, 11, 13 а 9 нету. Тогда можно воспользоваться функцией count , которая считает с массива, число всех нужных строк. Ну или сам массив, запихнуть в rand и доставать от туда значения. Это будет даже намного удобнее и правильней со стороны обращения, мало ли вы удалите запись, тогда он вернёт null.