Как выбрать уникальные значения одного поля c разных таблиц

BabyKiller

Новичок
Как выбрать уникальные значения одного поля c разных таблиц

Как выбрать уникальные значения одного поля в разных таблицах?
Например есть две одинаковые таблицы, но имеющие разные значения:

table1
------
value1
value2
value3

table2
------
value1
value3
value5

Хочу одним SQL запросом получить уникальные поля этих двух таблиц, т.е.:

query_table
-----------
value1
value2
value3
value4
value5

Пробовал играться объединением таблиц и функцией DISTINCT, чёт не получается.. :(
 

zerkms

TDD infected
Команда форума
UNION DISTINCT + DISTINCT
а вообще, какого фига данные в разных таблицах?
 

BabyKiller

Новичок
zerkms
Если интересно - объясню :)

В первой таблице два поля: первое - название авто, второе - параметры шины для него
Во второй таблице тоже два поля: первое - название авто, второе - параметры дисков для него

Так же есть база дисков и шин.

Необходимо выбрать все названия авто, и показать для него подходящие шины и диски.
 

zerkms

TDD infected
Команда форума
делаешь третью таблицу
id | название авто

а в эти две вместо имени пишешь id авто из этой третьей.
профит!
 

BabyKiller

Новичок
zerkms
В моём вопросе, мне нужно было выбрать уникальные значения названий автомобилей (value) с разных таблиц (table1 - диски, table2 - шины). Теперь понятно? :)
zerkms, спасибо за наводку, всё получилось таким запросом:
PHP:
SELECT `field` FROM `table1` UNION SELECT `field` FROM `table2`
Вот что пишет Введение в SQL (М.Грабер) /рус./ - кстати, хорошая книжка :)
UNION будет автоматически исключать дубликаты строк из вывода. Это нечто несвойственное для SQL, так как одиночные запросы обычно содержат DISTINCT чтобы устранять дубликаты.
P.S.: спасибо, с нормализацией я знаком :), просто не стал всё это расписывать.
Но если есть желание, то можем пообщаться по этому поводу, т.к. нормализацию я не проводил, и объясню почему:
Если делать так, как ты сказал, то значит нужно будет делать форму для ввода данных:
1) Форма для ввод автомобилей
2) Форма для ввода параметров шин и дисков, посредством предварительного выбора автомобилей.
А верхние два пункта - это дополнительный гемор... причём очень дополнительный :)

А так как я реализовываю эту дополнительную функцию на уже имеющейся базе данных, где реализовано всё точно так же, то думаю, что это глупо тратить ОЧЕНЬ много времени на правильную реализацию, если 90% реализовано неправильно.

P.P.S: А что такое "профит"?
P.P.P.S: Что бы не флудить не по теме, пиши в личку, или по аське...:)
 

zerkms

TDD infected
Команда форума
BabyKiller
Если делать так, как ты сказал, то значит нужно будет делать форму для ввода данных:
1) Форма для ввод автомобилей
2) Форма для ввода параметров шин и дисков, посредством предварительного выбора автомобилей.
GUI вообще никак не связан с организацией хранилища. Вообще никак.
 

BabyKiller

Новичок
GUI вообще никак не связан с организацией хранилища. Вообще никак.
Хорошо, а как ты предлагаешь вводить данные в хранилище, без GUI.

P.S.: Очень заинтересовал mzz - посмотрю что за штука , надо будет поковырять...
 

zerkms

TDD infected
Команда форума
Хорошо, а как ты предлагаешь вводить данные в хранилище, без GUI.
так же как и сейчас. форма добавления новых дисков. та же самая. на сервере:
проверяешь, есть ли введённая модель в базе. если нет - добавляешь. если есть - ищешь id.
полученный/найденный id добавляется в таблицу дисков вместе с остальными характеристиками.

итого - форма (gui) та же, скрипт чуток модифицирован.
 

BabyKiller

Новичок
zerkms
Так вот прикол в том, что нет никакой формы, всё вводится через phpMyAdmin.

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

Я понимаю, если база будет огромной, но ради малейшей экономии процессорного времени и размеры БД - я считаю свои трудозатраты слишком высокими.

В идеальном случае - надо сделать форму вводу/удаления/редактирования данных. В худшем случае сделать так, как ты сказал, но по канонаи проектирования БД. Я выбрал золотую серединку :)
 

Фанат

oncle terrible
Команда форума
жесть =)

-~{}~ 05.04.09 14:24:

ну, будем ждать, когда ты опечатаешься в названии авто ;-)
 

Gas

может по одной?
BabyKiller
ты делаешь кривое решение, ещё и оправдываешь его даже сейчас, когда уже начинаешь ставитьк нему костыли.
 

BabyKiller

Новичок
*****, Gas, Предлагаете мне исправить старые косяки, где всё сделано именно таким образом???

Кстати - это мысль: сообщить заказчику (дизайн-студия), как там всё криво сделано, а уж по их желанию - реализую.

Я именно за правильно код, и если посмотреть мой последний проект :) (БД учёта компьютерного оборудования), то там именно так и сделано...
 

TutanXamoN

Новичок
BabyKiller
Так вот прикол в том, что нет никакой формы, всё вводится через phpMyAdmin.
Это тоже неправильно! Насильно нужно обучить всех SQL и вводить данные только запросами. Ибо трудозатраты на установку phpMyAdmin слишком высоки. Нельзя же до такой степени не ценить своё время.
 

BabyKiller

Новичок
TutanXamoN, :) всё что было сделано до меня - сделано до такой степени ужасно, что если я вам покажу php-код, то вы ужаснетесь :)
Я делал по аналогии. А если прикрепить красивую рюшечку к какашке, то какашка от этого не перестанет быть какашкой :)
 

findnext

Новичок
BabyKiller
я бы посоветовал не браться за такие вот проекты, в конечном итоге все косяки будут свалены на тебя. И ещё, если ты уж завёл такой пост, значит у тебя у самого недостаточно опыта, чтобы самостоятельно решить поставленную задачу. Не стоит оправдываться.

я считаю свои трудозатраты слишком высокими.
а я считаю что это всего лишь пустые слова

спасибо, с нормализацией я знаком
это называется слышал звон да не знаю где он. Если бы ты был действительно знаком с нормализацией то такого бы поста не возникло.

да что тут говорить, если ты даже не знаешь что такое UNION...
 

BabyKiller

Новичок
я бы посоветовал не браться за такие вот проекты, в конечном итоге все косяки будут свалены на тебя.
Спасибо вот за ценный совет, в таком ракурсе ещё не думал...

И ещё, если ты уж завёл такой пост, значит у тебя у самого недостаточно опыта, чтобы самостоятельно решить поставленную задачу.
Опыта - да, недостаточно. Но самостоятельно бы смог, создание этой темы - лишь ускорение нахождения решения поставленной задачи.

Не стоит оправдываться.
а я считаю что это всего лишь пустые слова
Ты был бы прав, если бы это был мой проект. Моё участие в нём - лишь добавление функциональности.


это называется слышал звон да не знаю где он. Если бы ты был действительно знаком с нормализацией то такого бы поста не возникло.
да что тут говорить, если ты даже не знаешь что такое UNION...
Знание теории - не обязывает знать практику.
А то, что я не знаю что такое UNION - говорит о моей малоопытности, чего я не скрываю.

Думаю писать сюда больше не стоит.
Резюме:
1) С заказчиком (дизайн-студия) обговорю данный вопрос, предъявлю все минусы текущей реализации.
2) Обещаю впредь делать всё по людски :), т.к. действительно - не важно как было сделано, важно то - как сделаешь ты.
3) Всем спасибо за ценные советы!

P.S.: В доказательство моей неопытности, хочу сказать, что ко мне в пути, идут эти две книжки (т.к. книг по SQL вообще не имею):
Бьюли Алан - Изучаем SQL
Молинаро Э. - SQL. Сборник рецептов
 

findnext

Новичок
BabyKiller
Если уж точно решил стать программистом, то вот тебе ссылка по теории бд. Там найдёшь любые ответы на любые вопросы по бд. http://db.grussell.org/
 

TutanXamoN

Новичок
Я делал по аналогии. А если прикрепить красивую рюшечку к какашке, то какашка от этого не перестанет быть какашкой
Не надо прикреплять и браться за такие проекты в принципе.
Если надо переделывать - доводим до ведома заказчика. Если он не согласен - идёт гулять. Иначе потом во всём виноват тот кто последний трогал.
 

BabyKiller

Новичок
TutanXamoN, да вот, что-то об этом не подумал.... :(

Хотя заказчик похоже в курсе, вот моя переписка:
Теперь вопрос о самом сайте. Я вижу что здесь сделаны несколько каталогов: шин, дисков, аккумуляторов, масла.., коврики. Сделано ли хоть какое-то управление этими данными? Т.е. может ли не программист, внести в эти каталоги новую информацию, либо изменить кое-что?
Всё на уровне программинга, через админку возможно только удалять товары и добавлять фото(диски)
А вот о том, что база изначально криво сделана, я как то не подумал упомянуть....

Это можно сказать, была моя первая проба сил, до этого это было лишь хобби...

Ещё раз, TutanXamoN, спасибо за ценный совет...
 
Сверху