SELECT из трех таблиц, с рандомной строкой.

kabachok

Новичок
SELECT из трех таблиц, с рандомной строкой.

Дано:
php5, mysql5, кривые руки, база.

База:
[sql]
CREATE TABLE `img_category` (
`id_category` smallint(6) NOT NULL auto_increment,
`poz` smallint(6) NOT NULL,
`name` char(10) NOT NULL,
`name_rus` char(20) NOT NULL,
`total_gallery` int(11) NOT NULL,
`total_files` int(11) NOT NULL,
PRIMARY KEY (`id_category`),
UNIQUE KEY `name` (`name`),
KEY `total_gallery` (`total_gallery`),
KEY `total_files` (`total_files`),
KEY `poz` (`poz`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

CREATE TABLE `img_files` (
`id_category` smallint(6) NOT NULL,
`id_gallery` mediumint(9) NOT NULL,
`name_file` char(36) character set cp1251 collate cp1251_general_cs NOT NULL,
PRIMARY KEY (`name_file`),
KEY `id_category` (`id_category`),
KEY `id_gallery` (`id_gallery`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

CREATE TABLE `img_gallery` (
`id_gallery` int(11) NOT NULL auto_increment,
`id_category` smallint(6) NOT NULL,
`name_gallery` char(50) NOT NULL,
`data_gallery` date NOT NULL,
`files_gallery` mediumint(9) NOT NULL,
`status_gallery` tinyint(4) NOT NULL,
PRIMARY KEY (`id_gallery`),
KEY `id_category` (`id_category`),
KEY `data_gallery` (`data_gallery`),
KEY `files_gallery` (`files_gallery`),
KEY `status_gallery` (`status_gallery`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
[/sql]

Запрос:
[sql]
SELECT `img_gallery`.* , `img_category`.* , `img_files`.*
FROM `img_gallery`
LEFT JOIN `img_category` ON `img_gallery`.id_category=`img_category`.id_category
LEFT JOIN `img_files` ON `img_gallery`.id_gallery=`img_files`.id_gallery
GROUP BY `img_gallery`.id_gallery
[/sql]

Вопрос: Реально ли сделать так, чтобы из таблицы img_files для каждой сроки img_gallery выводился случайный файл?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
чтобы из таблицы img_files для каждой сроки img_gallery выводился случайный файл?
А Mysql не офигеет от твоих запросов для каждой строки?
Как думаешь?
 

kabachok

Новичок
Автор оригинала: Mr_Max
А Mysql не офигеет от твоих запросов для каждой строки?
Как думаешь?
ну выбираться будет по 10 строк, думаю ничего страшного не случиться. Но так сделать в принцыпе возможно? и как, если не секрет.
 

Dovg

Продвинутый новичок
Индус, который живет во мне, подсказывает, что можно сделать подзапросом, в котором написать что-то типа where ... img_gallery= ... order by rand() limit 1;

Но это как-то не по-джедайски
 

kabachok

Новичок
Мы рыцари Джедаи, Мы борцы со злом, Темные силы завяжем узлом... (с) Кирпичи.

так вот что мне джедаи этого форума нашептали на ушко

[sql]
SELECT `img_gallery`.* , `img_category`.* , (
SELECT name_file
FROM img_files
WHERE id_gallery = img_gallery.id_gallery
ORDER BY RAND() LIMIT 1
)
FROM `img_gallery`
LEFT JOIN `img_category` ON `img_gallery`.id_category=`img_category`.id_category
LEFT JOIN `img_files` ON `img_gallery`.id_gallery=`img_files`.id_gallery
GROUP BY `img_gallery`.id_gallery
ORDER BY `img_gallery`.data_gallery DESC, `img_gallery`.id_gallery DESC
[/sql]

З.Ы. только что понял что мне не хватает еще одного поля в таблице img_files, нужно ввести iв файла, а то внутри галлереи непонятно как сортировать файлы.
 

Gas

может по одной?
kabachok
но когда в каждой категории станет хотя бы по паре тысяч файлов, работать будет очень быстро :)
 

Gas

может по одной?
Мне особенно понравилась эта ссылка, но я не вчитывался - посмотрел цифры в конце и взял на заметку :)
 
Сверху