Заморочка следующая: есть 2 одинаковые по структуре таблицы в одной БД. Для поиска по таблице использую выражение типа:
SELECT * FROM table1 WHERE field1 like '%запрос%'
. - всё работает нормально
Т.к. у меня обе таблицы одинаковые по структуре, то мне нужно сделать один запрос сразу в обе таблицы.
Прошу помощи в написании запроса, т.к. мой запрос:
SELECT * FROM table1, table2 WHERE table1.field2 like '%запрос%' OR table2.field2 like '%запрос%'
работает не корректно и результаты выводит неправильно.
Хотелось бы сделать такой запрос, чтобы поиск прошелся сначала по одной таблице, затем как она заканчивается, то "дорисовывается" дальше следующая таблица и при обращении к полям field2 обеих таблиц (table1 и table2) нужно, чтобы индекс у этого поля был одинаковы (напр. $tablerows[2]). А получается что у поля table1.field2 - индекс 2, а у поля table2.field2 индекс 15. (кол-во столбцов в обеих страницах 12)
Как сделать запрос в 2 таблицы, чтобы таблицы "склеились" одна под другой? (А не одна справа другой, или слева другой)
Спустя 1 минута, 59 секунд (21.01.2012 - 14:09) Xes написал(а):
Почитай про операттор ..... LEFT JOIN .... ON ......
Спустя 4 минуты, 32 секунды (21.01.2012 - 14:14) Jack_White написал(а):
Да, здесь внешнее обеднение таблиц необходимо
Спустя 5 минут, 34 секунды (21.01.2012 - 14:19) Commander Keen написал(а):
Может и оффтоп, но все мало-мальски грамотные проектировщики БД за записи такого рода отрывают руки с корнями... Звёздочка - есть зло ( Есть 5 полей - перечисли 5, есть 500 - перечисли 500. Необъяснимо, но факт )
Спустя 25 секунд (21.01.2012 - 14:20) MailRes написал(а):
Будет ли он работать, если в table1.field2 есть одинаковые значение, а в table2.field2 такие значения не найдутся?
Мне нужно, чтобы вывелись одинаковые значения поля field2 обеих таблиц и не важно есть ли совпадения в обеих таблицах сразу.
Мне нужно, чтобы вывелись одинаковые значения поля field2 обеих таблиц и не важно есть ли совпадения в обеих таблицах сразу.
Спустя 1 минута, 34 секунды (21.01.2012 - 14:21) MailRes написал(а):
Jack_White, гуглить на тему объединение таблиц?
Yegor Opanasjuk, учусь только, про звёздочку читал - что лучше описать необходимые поля, чем искать по всем чтобы не грузить БД и ускорить выполнение запроса.
Yegor Opanasjuk, учусь только, про звёздочку читал - что лучше описать необходимые поля, чем искать по всем чтобы не грузить БД и ускорить выполнение запроса.
Спустя 5 минут, 31 секунда (21.01.2012 - 14:27) alex12060 написал(а):
MailRes
Цитата |
гуглить на тему объединение таблиц? |
Да
Спустя 4 минуты, 2 секунды (21.01.2012 - 14:31) dadli написал(а):
Цитата |
Как сделать запрос в 2 таблицы, чтобы таблицы "склеились" одна под другой? (А не одна справа другой, или слева другой) |
мне кожется, здес более подаидиот UNION
MailRes
напишите какие именно поля хотите вибрать из первое и из втарои таблиц
Спустя 7 минут, 30 секунд (21.01.2012 - 14:38) Jack_White написал(а):
Цитата (dadli @ 21.01.2012 - 11:31) |
мне кожется, здес более подаидиот UNION |
да так проще будет
Спустя 2 минуты, 19 секунд (21.01.2012 - 14:41) MailRes написал(а):
dadli
В общем структура такая:
table1 и table2
поля следующие:
code - код товара производителя
name - описание
analog - уникальное числовое значение (присваиваю сам), т.к. в поле code содержатся различные значение, но производители порой могу выпустить аналогичную продукцию под другим номером.
В итоге ищу какой-либо товар по полю code, нахожу его уникальный номер в поле analog. Далее мне нужно отправить в обе таблицы запрос, чтобы по полям analog искался уникальный код. Далее как только найдено более одного совпадения по полю analog, на экран выводятся списком значения поля code.
Таким образом запросив в поиске один товар, я получаю сразу список всех его аналогов.
Про Union
Делаю вот такой запрос:
Запрос не выполняется - появляется сообщение "Запрос ошибочный!!!"
В общем структура такая:
table1 и table2
поля следующие:
code - код товара производителя
name - описание
analog - уникальное числовое значение (присваиваю сам), т.к. в поле code содержатся различные значение, но производители порой могу выпустить аналогичную продукцию под другим номером.
В итоге ищу какой-либо товар по полю code, нахожу его уникальный номер в поле analog. Далее мне нужно отправить в обе таблицы запрос, чтобы по полям analog искался уникальный код. Далее как только найдено более одного совпадения по полю analog, на экран выводятся списком значения поля code.
Таким образом запросив в поиске один товар, я получаю сразу список всех его аналогов.
Про Union
Делаю вот такой запрос:
$query = "(select * from table1 where analog like '%$zapros%') UNION (select * from table2 where analog like '%$zapros%')";
$result = mysql_query($query) or die("Запрос ошибочный!!!");
Запрос не выполняется - появляется сообщение "Запрос ошибочный!!!"
Спустя 18 минут, 40 секунд (21.01.2012 - 14:59) dadli написал(а):
в таблицах table1 и table2 количество поля равние ?
что содержит переменная $zapros ? как я понял число, ето так?
что содержит переменная $zapros ? как я понял число, ето так?
Спустя 14 минут, 14 секунд (21.01.2012 - 15:14) MailRes написал(а):
Тему можно закрыть!
dadli, на протяжении уже нескольких часов считал что table1 и table2 одинаковые по кол-ву полей. Сейчас решил ещё раз проверить, и удивился - вчера перед сном добавил одно поле в table1 (в конец таблицы) и забыл про это. В результате у меня получались ошибки!! Добавил поле в table2 и все заработало!!!
Всем спасибо за участие! Из-за невнимательности всех потревожил.
P.S. Jack_White и dadli, запрос с Union заработал, вроде так как надо, буду точить его дальше ))
Спасибо!
dadli - ещё раз указал на мою невнимательность)
dadli, на протяжении уже нескольких часов считал что table1 и table2 одинаковые по кол-ву полей. Сейчас решил ещё раз проверить, и удивился - вчера перед сном добавил одно поле в table1 (в конец таблицы) и забыл про это. В результате у меня получались ошибки!! Добавил поле в table2 и все заработало!!!
Всем спасибо за участие! Из-за невнимательности всех потревожил.
P.S. Jack_White и dadli, запрос с Union заработал, вроде так как надо, буду точить его дальше ))
Спасибо!
dadli - ещё раз указал на мою невнимательность)
Спустя 1 минута, 38 секунд (21.01.2012 - 15:15) Jack_White написал(а):
удачи)))
Спустя 19 минут, 51 секунда (21.01.2012 - 15:35) MailRes написал(а):
спс)