Комбинированные mySql запросы

atm779

Новичок
Комбинированные mySql запросы

есть 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
Если возможно, то, как будет выглядть такой запрос ?
 

Angerslave

Новичок
А что мешает сделать поле owner INT(8)?

-~{}~ 19.11.08 03:43:

Хотя, как я вижу, эту функцию почему-то выполняет поле oid... Если наблюдаются лаги, то скорее всего (с таким-то подходом к созданию полей) вы просто забыли про индексы...
 

Bitterman

Новичок
Я бы вместо поля owner сделал поле type типа enum в котором указывал бы тип объекта, на который ссылается поле oid.
то есть вместо
[sql]SELECT * FROM pict,rating WHERE pict.id = rating.oid[/sql]
было бы
[sql]SELECT * FROM pict,rating WHERE pict.id = rating.oid and rating.type = 'picture'[/sql]
 

atm779

Новичок
интересно. спасибо за то, что просветили
последую вашему совету.
 
Сверху