Задавайте вопросы, мы ответим
Вы не зашли.
Есть такая структура БД:
CREATE TABLE IF NOT EXISTS `bd_companys` (
`comp_id` bigint(20) NOT NULL auto_increment,
`comp_name` text NOT NULL,
`comp_comment` text NOT NULL,
PRIMARY KEY (`comp_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Компании' ;
-- --------------------------------------------------------
--
-- Структура таблицы `bd_comp_data`
--
CREATE TABLE IF NOT EXISTS `bd_comp_data` (
`comp_id` bigint(20) NOT NULL,
`data_name` text NOT NULL,
`data_value` text NOT NULL,
KEY `comp_id` (`comp_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Данные по компании';
В одной хранятся компании а в другой данные. Как сделать поиск по нескольким параметрам data_name = data_value ? По одному понятно, по всем тоже... а как сделать если нужно 2,3... параметра?
пс. Хранить по меньшей мере 30 столбцов в одной таблице не вижу логичным + хотелось бы гибкости в кол-ве полей...
Отредактированно Chertenok (10.09.2009 13:00:29)
Неактивен
Не понял, в чем вопрос. Хотите хранить названия параметров и из значения, не
указывая в таблице?
Неактивен
paulus написал:
Не понял, в чем вопрос. Хотите хранить названия параметров и из значения, не
указывая в таблице?
именно так, спасибо
а как добавить объединение с первой таблицей?
Отредактированно Chertenok (10.09.2009 15:09:36)
Неактивен
FROM bd_comp_data JOIN bd_companys USING (comp_id)
В чем проблема то?
Неактивен
paulus написал:
В чем проблема то?
Сделать это наиболее правильно как советуют профессионалы)
Неактивен
Ну, «в лоб» в данном случае — правильно Только индекс на (data_name, data_value) нужен.
Неактивен
paulus написал:
Ну, «в лоб» в данном случае — правильно Только индекс на (data_name, data_value) нужен.
На оба поля? А смысл?
Неактивен
Потому что у вас условия на два поля. Почитайте http://sqlinfo.ru/forum/viewtopic.php?id=151
Неактивен
vasya написал:
Потому что у вас условия на два поля. Почитайте http://sqlinfo.ru/forum/viewtopic.php?id=151
ALTER TABLE `bd_comp_data` ADD INDEX ( `data_name` , `data_value` ) ;
так?
#1170 - BLOB/TEXT column 'data_name' used in key specification without a key length
с "data_name" понятно, сделал varchar(10) ибо достаточно ... теперь ругается на "data_value" ... там точно может быть многобукв
Неактивен
укажите ограничение длины индекса
Неактивен
Едем дальше
Отредактированно Chertenok (11.09.2009 13:44:34)
Неактивен
У вас в таблице `bd_comp_data` 2 поля - data_name и data_value.
Вы пытаетесь выбрать строку, где (data_name = 'small_name' AND data_value LIKE '%ооо%') И (data_name = 'ruk_fio' AND data_value LIKE '%п%'). Естественно соответствия не находит.
Неактивен
vasya написал:
У вас в таблице `bd_comp_data` 2 поля - data_name и data_value.
Вы пытаетесь выбрать строку, где (data_name = 'small_name' AND data_value LIKE '%ооо%') И (data_name = 'ruk_fio' AND data_value LIKE '%п%'). Естественно соответствия не находит.
Хорошо, но мне именно так нужно найти, что бы эти значения были 'small_name' LIKE '%ооо%' AND 'ruk_fio' LIKE '%п%' в пределах одной компании
Отредактированно Chertenok (11.09.2009 14:04:32)
Неактивен
В таком контексте логичней иметь 30 столбцов.
Можно конечно извращаться и делать несколько объединений или считать кол-во совпадений через переменную, но смысл?
Неактивен
vasya написал:
В таком контексте логичней иметь 30 столбцов.
Можно конечно извращаться и делать несколько объединений или считать кол-во совпадений через переменную, но смысл?
а если их 60?
плоха...
Неактивен
А что плохого?
Неактивен
vasya написал:
А что плохого?
ИМХО избыточность, плохая расширяемость
Неактивен
А что не так с расширяемостью? Нужно ещё десять полей - добавили и никаких хлопот.
А вот ситуация, когда для разного количества параметров разные запросы, да ещё совершенно невменяемые.. То с расширяемость действительно плохая.
А избыточность, она разве мешает в данном случае?
Неактивен