spiner
Новичок
Помогите составить сложный запрос или поправить структуру БД
Смысл БД:
есть таблица фирм:
[SQL]
CREATE TABLE `clients` (
`cid` int(11) NOT NULL default '0',
`name` varchar(250) default NULL,
`inf` text,
PRIMARY KEY (`cid`),
FULLTEXT KEY `index` (`name`,`inf`)
) TYPE=MyISAM;
[/SQL]
есть таблица занятий (чем занимаются фирмы):
[SQL]
CREATE TABLE `sub_parts` (
`id_sub` smallint(6) NOT NULL default '0',
`name_sub` varchar(250) NOT NULL default '',
PRIMARY KEY (`id_sub`),
FULLTEXT KEY `sub_parts` (`name_sub`)
) TYPE=MyISAM;
[/SQL]
есть таблица соответствий этих таблиц (одна фирма может заниматься многими занятиями И одним занятием может заниматься много фирм) СВЯЗЬ: много - много:
[SQL]
CREATE TABLE `cp` (
`cid` int(11) NOT NULL default '0',
`id_sub` smallint(6) NOT NULL default '0'
) TYPE=MyISAM;
[/SQL]
Вопросы:
правильная ли структура?
мне надо осуществить поиск в таблицах clients и sub_parts слова $key по полнотекстовым индексам и вывести несовпадающие cid..
я хотел сделать так:
ссылка
А точнее сделать через UNION, сделал - работает, но сказали что это криво(
[SQL]
(SELECT clients.cid from clients where MATCH (name,inf) AGAINST ('$key')
) union (select cp.cid from sub_parts join cp on (sub_parts.id_sub=cp.id_sub) where match (sub_parts.name_sub) AGAINST ('$key'))
[/SQL]
Что не так?
Как мне лучше сделать.. Готов поменять структуру, т.к. база почти не заполнена..
Смысл БД:
есть таблица фирм:
[SQL]
CREATE TABLE `clients` (
`cid` int(11) NOT NULL default '0',
`name` varchar(250) default NULL,
`inf` text,
PRIMARY KEY (`cid`),
FULLTEXT KEY `index` (`name`,`inf`)
) TYPE=MyISAM;
[/SQL]
есть таблица занятий (чем занимаются фирмы):
[SQL]
CREATE TABLE `sub_parts` (
`id_sub` smallint(6) NOT NULL default '0',
`name_sub` varchar(250) NOT NULL default '',
PRIMARY KEY (`id_sub`),
FULLTEXT KEY `sub_parts` (`name_sub`)
) TYPE=MyISAM;
[/SQL]
есть таблица соответствий этих таблиц (одна фирма может заниматься многими занятиями И одним занятием может заниматься много фирм) СВЯЗЬ: много - много:
[SQL]
CREATE TABLE `cp` (
`cid` int(11) NOT NULL default '0',
`id_sub` smallint(6) NOT NULL default '0'
) TYPE=MyISAM;
[/SQL]
Вопросы:
правильная ли структура?
мне надо осуществить поиск в таблицах clients и sub_parts слова $key по полнотекстовым индексам и вывести несовпадающие cid..
я хотел сделать так:
ссылка
А точнее сделать через UNION, сделал - работает, но сказали что это криво(
[SQL]
(SELECT clients.cid from clients where MATCH (name,inf) AGAINST ('$key')
) union (select cp.cid from sub_parts join cp on (sub_parts.id_sub=cp.id_sub) where match (sub_parts.name_sub) AGAINST ('$key'))
[/SQL]
Что не так?
Как мне лучше сделать.. Готов поменять структуру, т.к. база почти не заполнена..