Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Выбор нескольких полей таблицы


Автор: Ky6uk 17.3.2008, 12:02
В общем суть такова:
Имеем базу MySql и таблицу. В таблице, допустим, 3 поля с названиями определенного предмета. Причем одно поле - официальное название,  а остальные два - синонимы. Необходимо вывести все названия (включая синонимы), например в алфавитном порядке. Так же необходимо учесть, что поля с синонимами могут быть пустые.
Есть вариант сперва загнать все в массив, потом уже сортировать. Хотелось бы знать можно ли это сделать на уровне MySQL.

Например:
Код

 ____________________
| row1 | row2 | row3 |
|------|------|------|
| abc  | cde  |      |
|      | aaa  | ccc  |
| efg  |      | bbb  |

Необходимо получить:
aaa
abc
bbb
ccc
cde
efg

Автор: skyboy 17.3.2008, 12:26
Код

SELECT `row1`
FROM `table`  as `table1`
WHERE `row1` <> ""
UNION ALL
SELECT `row2`
FROM `table`  as `table2`
WHERE `row2` <> ""
UNION ALL
SELECT `row3`
FROM `table`  as `table3`
WHERE `row3` <> ""
UNION ALL

Автор: Ky6uk 17.3.2008, 13:58
Спасибо, принцип понятен. Заодно еще подобный вопрос.

Задача та же, но в таблице не 3 поля, а 500. Но выборку нужно сделать так же по трем полям row1..3. Так же необходимо учесть какое поле основное (указывается в main).

Пример:
Код

 ______________________________________________
| main | row1  | row2  | row3  | ...   | row500|
|------|-------|-------|-------|-------|-------|
| row2 | abc   | cde   |       |       |       |
| row2 |       | aaa   | ccc   |       |       |
| row3 | efg   |       | bbb   |       |       |


После запроса должно быть примерно следующее:
Код

aaa (main aaa)
abc (main cde)
bbb (main bbb)
ccc (main aaa)
cde (main cde)
efg (main bbb)

На примеры выводятся все названия предмета, а в скобках указано официальное название.
Можно реализовать данный пример одним запросом в БД? Или без дополнительного запроса не обойтись? smile 

Автор: SelenIT 17.3.2008, 15:14
Цитата(Ky6uk @  17.3.2008,  13:58 Найти цитируемый пост)
Задача та же, но в таблице не 3 поля, а 500.

Если эти поля еще и однотипны, то очевидно напрашивается нормализация...

Автор: Ky6uk 17.3.2008, 15:24
Спасибо всем. Решено пересмотреть структуру БД.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)