HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Нетривиальные задачи Sql
  #1  
Старый 26.06.2008, 00:23
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами: 10143686

Репутация: 526
По умолчанию Нетривиальные задачи Sql

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

Для примера приведу задачку, котороя мне сегодня попалась (друг спросил):

Есть таблица, назовем ее tbl, в ней 2 столбца: st1 и st2. В каждом из столбцов какой то набор букв.

К примеру:

Код:
--------------------
         tbl
--------------------
    st1   |   st2
--------------------
     a    |     e     
     d    |     g     
     r    |     k
Так вот - необходимо НЕ используя UNION получить в результирующей выборке содержимое 2-х столбцов в одном столбце, упорядоченным по возрастанию.

Т.е.
Код:
---------
 result 
---------
   a     
   d
   e
   g
   k       
   r
Запрос вовсе не сложный, но если сразу не догадаться как решать - можно потратить некоторое время на обдумывание

Не было - ну да ладн
Код:
CREATE TABLE `tst` (
  `st1` varchar(1) NOT NULL,
  `st2` varchar(1) NOT NULL
);

INSERT INTO `tst` (`st1`, `st2`) VALUES
('a', 'e'),
('d', 'g'),
('r', 'k');

Последний раз редактировалось VDShark; 26.06.2008 в 00:55.. Причина: По просьбе трудящихся +)
 
Ответить с цитированием

  #2  
Старый 26.06.2008, 00:38
.Slip
Leaders of Antichat - Level 4
Регистрация: 16.01.2006
Сообщений: 1,966
С нами: 10692266

Репутация: 3486


По умолчанию

Кидай сразу код для создания таблицы и заполнения колонок. А то буковки впадлу переписывать
__________________
..
 
Ответить с цитированием

  #3  
Старый 26.06.2008, 03:59
Solker
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
С нами: 10537558

Репутация: 158
По умолчанию

Пойдет?
Код:
CREATE TEMPORARY TABLE temp TYPE=HEAP SELECT st1 as 'result' FROM tst;
INSERT INTO temp SELECT st2 FROM tst;
SELECT * FROM temp ORDER BY 'result' ASC;
DROP TABLE temp;
 
Ответить с цитированием

  #4  
Старый 26.06.2008, 11:25
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами: 10143686

Репутация: 526
По умолчанию

Цитата:
Сообщение от Solker  
Пойдет?
Код:
CREATE TEMPORARY TABLE temp TYPE=HEAP SELECT st1 as 'result' FROM tst;
INSERT INTO temp SELECT st2 FROM tst;
SELECT * FROM temp ORDER BY 'result' ASC;
DROP TABLE temp;
Ну.... Никакого полета фантазии
Давай без временных таблиц.
Тем более что это все сделать необходимо одним запросом.
 
Ответить с цитированием

  #5  
Старый 26.06.2008, 15:33
z3r0cool
Познающий
Регистрация: 22.04.2008
Сообщений: 32
С нами: 9501269

Репутация: 56
По умолчанию

Использовать представления (VIEW), хранимые функции...?
Собственно эти объекты и предназначены для решения проблем такого рода.

Последний раз редактировалось z3r0cool; 26.06.2008 в 16:21..
 
Ответить с цитированием

  #6  
Старый 26.06.2008, 16:50
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами: 10143686

Репутация: 526
По умолчанию

Цитата:
Сообщение от [ cash ]  
подзапросы тоже нельзя?
Можно. Хотя я без них решил

Цитата:
Сообщение от z3r0cool  
Использовать представления (VIEW), хранимые функции...?
Собственно эти объекты и предназначены для решения проблем такого рода.
Нет-нет-нет и еще раз нет... Тем более в основе представления так же лежит запрос - какая собственно разница? А в хп обычно группа запросов. Я ж написал - ЗАПРОС... 1 запрос. Ну максимум с подзапросами. А вы тут начали уже городить =)

На самом деле запрос достаточно легкий... главное догадаться каким путем идти.

Последний раз редактировалось VDShark; 26.06.2008 в 17:00..
 
Ответить с цитированием

  #7  
Старый 26.06.2008, 17:21
-=lebed=-
Флудер
Регистрация: 21.06.2006
Сообщений: 3,193
С нами: 10467746

Репутация: 4738


По умолчанию

Цитата:
Сообщение от VDShark  
На самом деле запрос достаточно легкий... главное догадаться каким путем идти.
Модифицировать исходную таблицу можно? Создавать дополнительные я так понял нельзя...
 
Ответить с цитированием

  #8  
Старый 26.06.2008, 14:58
guest3297
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
С нами: 10459106

Репутация: 2996


По умолчанию

подзапросы тоже нельзя?
 
Ответить с цитированием

  #9  
Старый 27.06.2008, 19:10
Solker
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
С нами: 10537558

Репутация: 158
По умолчанию

На тему большинство забило, я же 3 дня листал мануалы на mysql.com.
Будте добрвы выскажите тогда пожалуйста наиболее оптимальное решение.
Очень интересно.
 
Ответить с цитированием

  #10  
Старый 27.06.2008, 19:20
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
С нами: 10191686

Репутация: 210
По умолчанию

Цитата:
Будте добрвы выскажите тогда пожалуйста наиболее оптимальное решение
Рано еще
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.