Задавайте вопросы, мы ответим
Вы не зашли.
есть 2 таблицы
CREATE TABLE `pict` (
`id` int(8) NOT NULL auto_increment,
`name` varchar(511),
`fname` varchar(255),
PRIMARY KEY (`id`)
);
CREATE TABLE `rating` (
`id` int(11) NOT NULL auto_increment,
`owner` varchar(255),
`oid` int(11),
`count` int(11),
`rate` int(11),
PRIMARY KEY (`id`)
);
Как не сложно понять, в первой таблице хранятся данные о файлах некоторой галлереи изображений. Во второй таблице оценки голосований пользователей. При чем оцениваться могут не только данные из таблицы галлереи изображений но и другие.
Сейчас связь таблицы rating с прочими осуществляется по полю owner. В поле owner хранятся записи, например "pict12", что означает ссылку на запись таблицы pict, где id=12.
Интересно становится, когда мы пытаемся списком получить записи из pict с соответсвующими оценками. Сейчас это реализовано таким образом
'SELECT * FROM pict,rating WHERE pict.id = rating.oid'
Решение не является оптимальным. Возможно ли сделать аналогичную выборку, только, чтобы выборка осущесвлялась по правилу
'pict'+pict.id=rating.owner
Если возможно, то, как будет выглядть такой запрос ?
Неактивен
Как раз то решение, которое вы хотите и является неоптимальным. В этом случае n*m (где n и m кол-во строк в таблицах) раз будет происходить вычисление и сравнение над строковыми переменными.
Сейчас же идет сравнение целочисленных переменных, причем одна из колонок является ключом.
У вас не самая оптимальная структура базы. Поле `owner` из таблицы rating лучше удалить, и для оценок других объектов создать другую таблицу(ы).
Неактивен
SELECT * FROM pict,rating WHERE pict.id = rating.oid'
Решение не является оптимальным. Возможно ли сделать аналогичную выборку, только, чтобы выборка осущесвлялась по правилу
'pict'+pict.id=rating.owner
То, что Вы хотите, выглядит так:
Неактивен
интересно. спасибо за то, что просветили
последую вашему совету.
Неактивен