Запрос к двум таблицам

SergeyKa2

Guest
Запрос к двум таблицам

Есть две таблицы с одинаковой структурой.
Два прайса разных поставщиков

Нужно найти одним запросом все записи в одной и в другой записи удовлетворяющие условию и применить LIMIT.

делаю
SELECT * FROM price1,price2 WHERE price1.cod_searche LIKE "123 0071 12" OR price2.cod_searche LIKE "123 0071 12" limit 1,100;

В результирующем запросе к каждой записи найденой в первой таблице сопоставляются ВСЕ записи второй.

Обьясните что не так делаю?
 

Demiurg

Guest
SELECT * FROM price1,price2 WHERE price1.cod_searche = price2.cod_searche limit 1,100;
 

SergeyKa2

Guest
Извиняюсь, если не доконца обьяснил.

дело в том, что code_search содержит строку с разными кодами через запятую.
например должны найтись поля

123 0071 12,123 0071 15
и
123 0071 12,123 0071 20,123 0071 17

Если быть точным то изначально я составлял условие поиска такое -
SELECT * FROM price1 AS t1,price2 AS t2 WHERE t1.cod_searche LIKE "123%" OR t1.cod_searche LIKE "%,123%" OR t2.cod_searche LIKE "123%" OR t2.cod_searche LIKE "%,123%" limit 1,100;
 

Demiurg

Guest
Стоит подумать над структурой базы. хранить через запятую - не самая удачная мысль.
 

SergeyKa2

Guest
Простите за навязчивость, но нельзя ли подсказать как лучше в данном конкретном случае сделать переменное количество кодов?

На одну запись в таблице может быть до 20 кодов для поиска.

Скажу больше - это запчасти для автомобилей и у каждой детали существует код изготовления и коды аналогов (применяемость)
 

Demiurg

Guest
вынести это в отдельную таблицу вида:
id детали, код
 

Falc

Новичок
SergeyKa2
>>Есть две таблицы с одинаковой структурой.
>>Два прайса разных поставщиков

Такое нужно делать в одной таблице.

>>На одну запись в таблице может быть до 20 кодов для поиска.

>>Скажу больше - это запчасти для автомобилей и у каждой детали существует код изготовления и коды аналогов (применяемость)

Почитай про связь многие ко многим.
 

SergeyKa2

Guest
Такое нужно делать в одной таблице.
Прайсы обновляются каждый день на автомате с почты.
Работает перл скрипт, который удаляет таблицу и строит её поновой из XLS файла. так удобней и быстрее и проще.
Если я буду вычищать старое и заполнять новым - я буду грузить сервер дурной работой.

Почитай про связь многие ко многим.
Я спрашивал совета по структуре, а не "можно ли сделать"
 

Falc

Новичок
SergeyKa2
>>Если я буду вычищать старое и заполнять новым - я буду грузить сервер дурной работой.

Я полагаю лучше нагрузить сервер раз в день "дурной работой". нежели каждый раз на выводе при обращении к сайту грузить его еще более "дурной работой".

>>Я спрашивал совета по структуре, а не "можно ли сделать"

Не понял.
 

chira

Новичок
сделай две таблицы:
1. содежит информацию о прайсах (всех поставщиков): prices
2. список поставщиков: providers

при удалении/записи новой информации приводи к одной структуре, используй существующие таблицы как временные.
примерная схема:
1. удаляем все индексы из prices
2. truncate table prices
3. загружаем данные во временные таблицы (не должно быть у них индексов)
4. добавляем записи из временных таблиц в prices с учетом общей структуры и поставщика
5. строим необходимые индексы

тогда очень удобно искать
Код:
SELECT p.*,pp.name FROM prices p, providers pp
WHERE p.prvd_id=pp.id and p.cod_searche IN ('123 0071 12','123 0071 15','123 0071 20','123 0071 17')
)
-~{}~ 30.03.04 10:50:

На одну запись в таблице может быть до 20 кодов для поиска.
тогда еще и третья таблица с кодами
запрос немного усложниться ...
 

SergeyKa2

Guest
Falc
chira

Спасибо за советы и помощь!

Всётаки прийдется обьединять всё в одну таблицу...
Чтож если так проще - тогда воспользуемся этим вариантом.

С providers пока повременю. Когда их будет порядка 10 - тогда можно будет сделать базу. А пока зашиваю всё в основной код программы привязываясь к коду.


Тогда один маленький вопрос по заполнению. Вообщем из за него сделал двумя таблицами.

Когда происходит обновление я помечал старые записи на удаление и упаковывал, но при последующем заполнении код id
Код:
CREATE TABLE price1 (id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, ...
..., PRIMARY KEY (id))
начинался со следующего значения допустим последний был 500 при обновлении он становился 501.

Пришлось разбить на 2 таблицы и использовать
Код:
DROP TABLE price1
 

SergeyKa2

Guest
Falc

И наплевать на увеличивающийся код?
Просто он у меня присутствует в ссылке на корзину... хотя вообщем то это нестрашно.
 

Апельсин

Оранжевое создание
chira, ты только советуя TRUNCATE не забывай добавлять что это будет работать для ISAM/MyISAM таблиц.
 

SergeyKa2

Guest
Апельсин

Для того чтобы под FreeBSD MySQL создать таблицу ISAM/MyISAM требуется что то дополнительно указать?
 

Апельсин

Оранжевое создание
SergeyKa2, нет. Это те типы таблиц, которые используются по умолчанию.
 

SergeyKa2

Guest
Подскажите, а вертикальное обьединение таблиц существует?

Допустим есть две исходные таблицы

Нужно добавить в третью по очереди 1 и 2
 

SergeyKa2

Guest
Falc

Ну конечно ЖЕ!!!

Похоже именно он и нужен был мне в самом начале, хотя наверно коды я вынесу в отдельную таблицу, т.к. по прочтению литературы убедился, что таблица в таблице это плохо :)
 
Сверху