Регистрация
Регистрация Поиск Сообщество  
CGM > Всякая всячина > Поговорим за жизнь
Опции темы

Задачка программистам (SQL)

Важные объявления
Старый 05.06.2006, 16:27     TS Старый   #1 (permalink)
Бессмертный
 
Регистрация: 17.02.2004
Адрес: Russia
Сообщений: 4,469
Тут много профессиональных программистов, может кто поможет начинающему?
Работаю с базой трекера, возникла такая задача. Если кто не в курсе, там хранятся все карты стола, каждая в своем столбце (итого 5 столбцов), стандартные двухбуквенные обозначения (9h - девятка червей). Нужно выбрать (посчитать) записи, скажем, где на столе 4 карты одной масти или где на столе лежит готовый сет. Может кто предложит не слишком громоздкий запрос?
Yura вне форума      
Старый 05.06.2006, 16:56   #2 (permalink)
Бессмертный
 
Регистрация: 08.02.2006
Адрес: Москва
Сообщений: 12,352
Это MySQL? А UserDefined Function в нём есть?

з.ы. Без них "не слишком громоздкий" запрос не получится. Сколько сравнений ты делаешь в уме, столько же придётся написать и в запросе.
__________________
Моё мнение здесь для того, чтобы узнать, почему оно неправильное.
CorwinXX вне форума      
Старый 05.06.2006, 17:19   #3 (permalink)
Бессмертный
 
Регистрация: 08.02.2006
Адрес: Москва
Сообщений: 12,352
Вот, например, запрос для определения сета на столе, когда на столе лежит 5 карт:

Код:
select * from hands
where
c1 is not null and c2 is not null and c3 is not null and c4 is not null and c5 is not null
and
(
   left(c1, 1) = left(c2, 1) and left(c1, 1) = left(c3, 1)
or left(c1, 1) = left(c2, 1) and left(c1, 1) = left(c4, 1)
or left(c1, 1) = left(c2, 1) and left(c1, 1) = left(c5, 1)
or left(c1, 1) = left(c3, 1) and left(c1, 1) = left(c4, 1)
or left(c1, 1) = left(c3, 1) and left(c1, 1) = left(c5, 1)
or left(c1, 1) = left(c4, 1) and left(c1, 1) = left(c5, 1)
or left(c2, 1) = left(c3, 1) and left(c2, 1) = left(c4, 1)
or left(c2, 1) = left(c3, 1) and left(c2, 1) = left(c5, 1)
or left(c2, 1) = left(c4, 1) and left(c2, 1) = left(c5, 1)
or left(c3, 1) = left(c4, 1) and left(c3, 1) = left(c5, 1)
)
Здесь с1-с5 - это поля с картами.
__________________
Моё мнение здесь для того, чтобы узнать, почему оно неправильное.
CorwinXX вне форума      
Старый 05.06.2006, 17:20   #4 (permalink)
Участник
 
Аватар для Appl
 
Регистрация: 23.12.2004
Адрес: Екатеринбург-Москва
Сообщений: 128
Если сделать красиво, то просто сложить все столбцы как строки и работать с одной строкой по количеству вхождений (но зависит от того поддерживает ли это база).
Если сделать громоздко, то может быстрее работать, поэтому не советую избегать
Ни постгри ни аксесс не знаю, поэтому точный запрос не могу дать.


Посмотрел Access - там такое вроде нельзя сделать.


А так-то конкатенация строк + RegEx рулят
Appl вне форума      
Старый 05.06.2006, 22:45     TS Старый   #5 (permalink)
Бессмертный
 
Регистрация: 17.02.2004
Адрес: Russia
Сообщений: 4,469
CorwinXX, ты предлагаешь поиск от сета до каре (включая фулы) что немного шире, чем хотелось бы.
Appl, я тоже думал о складывании строк и выборке через like но при этом придется задавать отдельно все карты/масти - опять куча условий (по крайней мере как я сейчас это вижу).

Интересует запрос, который будет работать на обоих базах (аксес и пострге).
Yura вне форума      
Старый 06.06.2006, 00:53   #6 (permalink)
Бессмертный
 
Регистрация: 08.02.2006
Адрес: Москва
Сообщений: 12,352
Цитата:
Сообщение от Yura писал пн, 05 июня 2006 22:45
CorwinXX, ты предлагаешь поиск от сета до каре (включая фулы) что немного шире, чем хотелось бы.
Значит в каждую строчку нужно добавить ещё по три "<>".


з.ы. Например, для первой строчки:
Код:
and left(c1, 1) <> left(c4, 1) and left(c1, 1) <> left(c1, c5) and left(c4, 1) <> left(c5, 1)
__________________
Моё мнение здесь для того, чтобы узнать, почему оно неправильное.
CorwinXX вне форума      

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ВОПРОС ПРОГРАММИСТАМ vovik11 Вопросы от новичков 4 21.03.2011 14:41
Вопрос к программистам по лобби ФТП mr.kiris Покер софт 3 23.02.2011 23:20
Программистам - BetPot for PokerStars MakoDim PokerStars 11 21.03.2010 21:44
Вопрос к администрации и программистам Гламуризатор-р-р Техническая поддержка форума 16 21.02.2007 22:39



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.

Быстрый переход
Правила форумов CGM Контакты Справка Обратная связь CGM.ru Архив Вверх Главная
 
Использование материалов сайта разрешено только при наличии активной ссылки на источник.
Все права на картинки и тексты принадлежат Информационному агентству CGM и их ПАРТНЕРАМ. Политика конфидециальности
CGM.ru на Youtube CGM.ru на Google+ CGM.ru в Twitter CGM.ru на Facebook CGM.ru в vKontakte CGM.ru в Instagram

В сотрудничестве с Pokeroff.ru
Текущее время: 06:58. Часовой пояс GMT +3.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot