2013-03-26 4 views
3

Я попытался найти что-то, что поможет мне с этим, но не повезло.выберите различные значения и порядок по тому же столбцу (значение)

У меня есть столбец «slide_no» со значениями 1-4. Я хочу выбрать все из базы данных с помощью отдельного заказа slide_no от slide_no, но показывать случайные выбранные изображения.

Таблица базы данных

 
slide_id | slide_name | slide_no | fk_project_id 
    1  | pic1.jpg | 1  | 2 
    2  | pic2.jpg | 3  | 4 
    3  | pic3.jpg | 2  | 3 
    4  | pic4.jpg | 4  | 1 
    5  | pic5.jpg | 2  | 6 
    6  | pic6.jpg | 3  | 5 

Как вы можете видеть, slide_no не должны быть уникальными, и я хочу, чтобы иметь возможность показать случайные изображения на каждой загрузке страницы. До сих пор я только смог создать запрос, который выведет первые 4 изображения.

Можно ли заказать slide_no и получить случайные изображения, с разными (все еще упорядоченными по слайдово) изображениями?

Заранее спасибо.

+0

Что вы подразумеваете под «случайными изображениями слайдов» –

+0

Я считаю, что op хочет случайное изображение из изображений, где slide_no = 1, случайное изображение из изображений, где slide_no = 2, случайное изображение с изображений, где slide_no = 3 , и случайное изображение из изображений, где slide_no = 4. – jswolf19

+0

Да, случайное изображение из изображений, где slide_no = 1 и т. д. :) – Niantic

ответ

1

Рабочий пример:

http://www.sqlfiddle.com/#!2/0664c/8

Select slide_name, slide_no From 
(SELECT * 
FROM (SELECT * 
    FROM tableName 
    GROUP BY slide_no, slide_name 
    ORDER BY RAND() 
) `tempTable` 
) x 
Group by slide_no 
ORDER BY slide_no ASC 
limit 4 
+0

Это почти сделало мой день! Картинки действительно изменились, но, к сожалению, все те же снимки. Можно ли изменить это, чтобы он выбирал случайное изображение, но заказывал его «slide_n»? – Niantic

+0

@Niantic да, попробуйте последнее обновление. –

+0

Похоже, что он работал минуту, но он выбирает все изображения и выкладывает их все. Хотя только 4 из них показывают, вы можете видеть все 6 в исходном коде. Я попробовал LIMIT 4, но потом он снова выбирает 4 случайных случая, и он может иметь 1,2,2,3 (пример) - отсутствует slide_no = 4 и имеет и дополнительный файл slide_no = 2. Пробовал отдельный файл перед слайдом, но это вызвало ошибку , – Niantic

2

Вы могли бы попробовать что-то вроде этого, если ваш просто ищет одного случайного ID каждый раз.

SELECT slide_id 
FROM {table_name} 
ORDER BY RAND() 
LIMIT 1; 
4

MySQL предоставляет ORDER BY RAND() для этого.

ORDER BY RAND() в сочетании с LIMIT полезен для выбора случайной выборки из набора строк.

Запрос будет:

SELECT * 
FROM (SELECT * 
    FROM `tblName` 
    GROUP BY slide_no 
    ORDER BY RAND() 
) `tempTable` 
ORDER BY slide_no ASC 
+1

Я попробовал ORDER BY RAND(), но он перепутал его порядок. Мне нужна случайная картинка, упорядоченная по слайду (asc). – Niantic

+0

@Niantic Проверьте изменения. – hjpotter92

+0

Теперь я могу показаться невежественным, но что такое 'tempTable'? – Niantic

0
SELECT slide_no 
, (SELECT TOP 1 slide_name 
    FROM #tmp T2 
    WHERE T2.slide_no = T1.slide_no  
    ORDER BY RAND() --You can place other logic to "randomize" here in the future 
    ) 
FROM #tmp T1 
GROUP BY slide_no; 

Я не уверен, если это дает вам то, что вы ищете. Проблема в том, что повторяющиеся вызовы RAND() с одинаковым начальным значением возвращают одинаковые результаты. Если вы хотите, чтобы это было действительно случайным, это другой вопрос сам по себе. См. here для генерации случайного числа в SQL.

+0

Уверен, что у вопроса был тег MySQL. – hjpotter92

Смежные вопросы