SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.11.2008 00:17:45

atm779
Участник
Зарегистрирован: 19.11.2008
Сообщений: 6

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

Неактивен

 

#2 19.11.2008 00:43:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

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

Как раз то решение, которое вы хотите и является неоптимальным. В этом случае n*m (где n и m кол-во строк в таблицах) раз будет происходить вычисление и сравнение над строковыми переменными.
Сейчас же идет сравнение целочисленных переменных, причем одна из колонок является ключом.

У вас не самая оптимальная структура базы. Поле `owner` из таблицы rating лучше удалить, и для оценок других объектов создать другую таблицу(ы).

Неактивен

 

#3 19.11.2008 07:56:17

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

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

SELECT * FROM pict,rating WHERE pict.id = rating.oid'

Решение не является оптимальным. Возможно ли сделать аналогичную выборку, только, чтобы выборка осущесвлялась по правилу
'pict'+pict.id=rating.owner

То, что Вы хотите, выглядит так:

SELECT * FROM pict,rating WHERE rating.oid = CONCAT('pict', pict.id);


Только это плохо... Лучше заменить поле owner на два: id картинки (или чего-то еще) и тип оцениваемой сущности (его лучше сделать ENUM).

Неактивен

 

#4 21.11.2008 23:23:33

atm779
Участник
Зарегистрирован: 19.11.2008
Сообщений: 6

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

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson