База для футбольных чемпионатов
От: anton-09  
Дата: 12.06.08 14:56
Оценка:
Добрый день, вопрос по теме SQL + C#

Задался целью написать программку для ведения таблиц, например, футбольных чемпионатов. Необходимый минимум для таблицы — слева набор команд, сверху набор команд, в ячейках — счет матчей. Ну и пара столбцов для мячей, очков и.т.д. В общем, кто немного знаком с футболом — понял что я хочу.

Вопрос по SQL
Так вот, как лучше всего результаты матчей хранить в БД? Ничего лучше пока не придумал, как в одной строке хранить 4 команды (допустим что всего 4 команды) и 3 результата матчей, например,
команда1 | команда2 | команда3| команда4 | счет1 | счет2 | счет3
Это будет значить что "команда1" сыграла с "командой2" со счетом "счет1", "команда1" сыграла с "командой3" со счетом "счет2" и "команда1" сыграла с "командой4" со счетом "счет3".

Вопрос по C# (VS 2008)
Как это все дело засунуть в DataGridView? Возможно ли это вообще. То, что у меня на данный момент получилось — в приложенном файле. В принципе ничего, только часть столбцов (названия команд) надо вынести в заголовки соответствующих столбцов со счетом...

Спасибо большое, если ответите хотя бы на один из вопросов!!
sql c# datagridview
Re: База для футбольных чемпионатов
От: _Oleg_ Украина  
Дата: 12.06.08 15:43
Оценка:
Здравствуйте, anton-09, Вы писали:

A0>Добрый день, вопрос по теме SQL + C#


A0>Вопрос по SQL

A0>Так вот, как лучше всего результаты матчей хранить в БД? Ничего лучше пока не придумал, как в одной строке хранить 4 команды (допустим что всего 4 команды) и 3 результата матчей, например,
A0>команда1 | команда2 | команда3| команда4 | счет1 | счет2 | счет3
A0>Это будет значить что "команда1" сыграла с "командой2" со счетом "счет1", "команда1" сыграла с "командой3" со счетом "счет2" и "команда1" сыграла с "командой4" со счетом "счет3".

A0>Спасибо большое, если ответите хотя бы на один из вопросов!!


Я думаю лучше так.

2 таблицы:
1) Команды
команда_id (PK)

2) Матчи
команда_id_1
команда_id_2
счет
Re[2]: База для футбольных чемпионатов
От: anton-09  
Дата: 12.06.08 15:56
Оценка:
Здравствуйте, _Oleg_, Вы писали:

_O_>Здравствуйте, anton-09, Вы писали:


A0>>Добрый день, вопрос по теме SQL + C#


A0>>Вопрос по SQL

A0>>Так вот, как лучше всего результаты матчей хранить в БД? Ничего лучше пока не придумал, как в одной строке хранить 4 команды (допустим что всего 4 команды) и 3 результата матчей, например,
A0>>команда1 | команда2 | команда3| команда4 | счет1 | счет2 | счет3
A0>>Это будет значить что "команда1" сыграла с "командой2" со счетом "счет1", "команда1" сыграла с "командой3" со счетом "счет2" и "команда1" сыграла с "командой4" со счетом "счет3".

A0>>Спасибо большое, если ответите хотя бы на один из вопросов!!


_O_>Я думаю лучше так.


_O_>2 таблицы:

_O_>1) Команды
_O_>команда_id (PK)

_O_>2) Матчи

_O_>команда_id_1
_O_>команда_id_2
_O_>счет

Да, я так вначале и делал. А как тогда написать запрос который бы выводил в первой строке названия команд, в первом столбце — тоже названия команд, а в "середине" таблицы — счет матчей между ними?
Re[3]: База для футбольных чемпионатов
От: . Великобритания  
Дата: 12.06.08 18:32
Оценка:
anton-09 wrote:

> Да, я так вначале и делал. А как тогда написать запрос который бы

> выводил в первой строке названия команд, в первом столбце — тоже
> названия команд, а в "середине" таблицы — счет матчей между ними?
Поди студент? Лабораторку делаешь? Подсказка — найди что такое alias для имени таблицы, что такое join и как можно использовать одну таблицу в одном запросе дважды.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: База для футбольных чемпионатов
От: Lloyd Россия  
Дата: 12.06.08 18:53
Оценка:
Здравствуйте, ., Вы писали:

.>Поди студент? Лабораторку делаешь? Подсказка — найди что такое alias для имени таблицы, что такое join и как можно использовать одну таблицу в одном запросе дважды.


Это не поможет. Он хочет pivot-ить ее.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[3]: База для футбольных чемпионатов
От: _Oleg_ Украина  
Дата: 13.06.08 09:02
Оценка:
Здравствуйте, anton-09, Вы писали:

A0>Здравствуйте, _Oleg_, Вы писали:


_O_>>Здравствуйте, anton-09, Вы писали:


A0>>>Добрый день, вопрос по теме SQL + C#


A0>>>Вопрос по SQL

A0>>>Так вот, как лучше всего результаты матчей хранить в БД? Ничего лучше пока не придумал, как в одной строке хранить 4 команды (допустим что всего 4 команды) и 3 результата матчей, например,
A0>>>команда1 | команда2 | команда3| команда4 | счет1 | счет2 | счет3
A0>>>Это будет значить что "команда1" сыграла с "командой2" со счетом "счет1", "команда1" сыграла с "командой3" со счетом "счет2" и "команда1" сыграла с "командой4" со счетом "счет3".

A0>>>Спасибо большое, если ответите хотя бы на один из вопросов!!


_O_>>Я думаю лучше так.


_O_>>2 таблицы:

_O_>>1) Команды
_O_>>команда_id (PK)

_O_>>2) Матчи

_O_>>команда_id_1
_O_>>команда_id_2
_O_>>счет

A0>Да, я так вначале и делал. А как тогда написать запрос который бы выводил в первой строке названия команд, в первом столбце — тоже названия команд, а в "середине" таблицы — счет матчей между ними?


Одним SQL-запросом ?
Re[5]: База для футбольных чемпионатов
От: Ромашка Украина  
Дата: 13.06.08 09:11
Оценка:
Lloyd пишет:
> Это не поможет.

???

select c1.Название, m.Счет, c2.Название
from [Матчи] m
    left join [Команды] c1 on m.команда_id_1 = c1.команда_id
    left join [Команды] c2 on m.команда_id_2 = c2.команда_id
Posted via RSDN NNTP Server 2.1 beta


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[6]: База для футбольных чемпионатов
От: Lloyd Россия  
Дата: 13.06.08 09:29
Оценка:
Здравствуйте, Ромашка, Вы писали:

>> Это не поможет.


Р>???


Прочти еще раз первое сообщение.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[5]: База для футбольных чемпионатов
От: Ромашка Украина  
Дата: 13.06.08 09:29
Оценка:
Lloyd пишет:
> Это не поможет. Он хочет pivot-ить ее.

Опс, сорри, таки да.
Posted via RSDN NNTP Server 2.1 beta


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[5]: База для футбольных чемпионатов
От: Аноним  
Дата: 13.06.08 11:23
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, ., Вы писали:


.>>Поди студент? Лабораторку делаешь? Подсказка — найди что такое alias для имени таблицы, что такое join и как можно использовать одну таблицу в одном запросе дважды.


L>Это не поможет. Он хочет pivot-ить ее.


Как же здесь медленно отвечают. Я уж и забыл, что сюда тоже кидал вопрос
В общем проблема решена двояко.

1. Простое решение с точки зрения кодирования, но сложное с точки зрения SQL —

SELECT     ' ' AS Expr1,
                          (SELECT     Name
                            FROM          Teams
                            WHERE      (ID = 1)) AS Expr2,
                          (SELECT     Name
                            FROM          Teams AS Teams_3
                            WHERE      (ID = 2)) AS Expr3,
                          (SELECT     Name
                            FROM          Teams AS Teams_2
                            WHERE      (ID = 3)) AS Expr4,
                          (SELECT     Name
                            FROM          Teams AS Teams_1
                            WHERE      (ID = 4)) AS Expr5
UNION ALL
SELECT DISTINCT Name,
                          (SELECT     Score
                            FROM          Matches AS matches1
                            WHERE      (Team1 = teams1.ID) AND (Team2 = 1) OR
                                                   (Team1 = 1) AND (Team2 = teams1.ID)) AS Expr1,
                          (SELECT     Score
                            FROM          Matches AS matches2
                            WHERE      (Team1 = teams1.ID) AND (Team2 = 2) OR
                                                   (Team1 = 2) AND (Team2 = teams1.ID)) AS Expr2,
                          (SELECT     Score
                            FROM          Matches AS matches3
                            WHERE      (Team1 = teams1.ID) AND (Team2 = 3) OR
                                                   (Team1 = 3) AND (Team2 = teams1.ID)) AS Expr3,
                          (SELECT     Score
                            FROM          Matches AS matches4
                            WHERE      (Team1 = teams1.ID) AND (Team2 = 4) OR
                                                   (Team1 = 4) AND (Team2 = teams1.ID)) AS Expr4
FROM         Teams AS teams1


2. Сложное решение с точки зрения кодирования, и легкое с точки зрения SQL
Пришлось забыть о дизайнере форм и все писать руками, но может так оно и к лучшему. Убрал нафиг BindingSource у грида, поскольку смысла теперь в нем нет, т.к. заполняю все руками, создал один TableAdapter, в нем — 2 селекта: один для получения списка команд, другой — для получения результатов матчей. По результатам первого динамически строятся колонки и строки грида, по результатам второго — заполняются соответствуюищие ячейки.

P.S. Для юзера с многозначительным ником "." — нет, не студент, а аспирант, но это несущественно, т.к. прогу пишу для себя, чтобы вспомнить шарп. Про алиас и джойн — посмотри мой запрос.
Re[4]: База для футбольных чемпионатов
От: anton-09  
Дата: 13.06.08 11:26
Оценка:
Здравствуйте, _Oleg_, Вы писали:

_O_>Здравствуйте, anton-09, Вы писали:


A0>>Здравствуйте, _Oleg_, Вы писали:


_O_>>>Здравствуйте, anton-09, Вы писали:


A0>>>>Добрый день, вопрос по теме SQL + C#


A0>>>>Вопрос по SQL

A0>>>>Так вот, как лучше всего результаты матчей хранить в БД? Ничего лучше пока не придумал, как в одной строке хранить 4 команды (допустим что всего 4 команды) и 3 результата матчей, например,
A0>>>>команда1 | команда2 | команда3| команда4 | счет1 | счет2 | счет3
A0>>>>Это будет значить что "команда1" сыграла с "командой2" со счетом "счет1", "команда1" сыграла с "командой3" со счетом "счет2" и "команда1" сыграла с "командой4" со счетом "счет3".

A0>>>>Спасибо большое, если ответите хотя бы на один из вопросов!!


_O_>>>Я думаю лучше так.


_O_>>>2 таблицы:

_O_>>>1) Команды
_O_>>>команда_id (PK)

_O_>>>2) Матчи

_O_>>>команда_id_1
_O_>>>команда_id_2
_O_>>>счет

A0>>Да, я так вначале и делал. А как тогда написать запрос который бы выводил в первой строке названия команд, в первом столбце — тоже названия команд, а в "середине" таблицы — счет матчей между ними?


_O_>Одним SQL-запросом ?


Да, и выше я написал как это делается (правда написал случайно под анонимом)
Re[6]: База для футбольных чемпионатов
От: Lloyd Россия  
Дата: 13.06.08 12:35
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>1. Простое решение с точки зрения кодирования, но сложное с точки зрения SQL —


Если база позволяет, посмотри все-таки PIVOT
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[6]: База для футбольных чемпионатов
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.06.08 07:53
Оценка:
Здравствуйте, <Аноним>, Вы писали:
А>Как же здесь медленно отвечают. Я уж и забыл, что сюда тоже кидал вопрос
Ну, так это не чат.
А>В общем проблема решена двояко.

А>1. Простое решение с точки зрения кодирования, но сложное с точки зрения SQL —

Читать про PIVOT.
А>2. Сложное решение с точки зрения кодирования, и легкое с точки зрения SQL
А>Пришлось забыть о дизайнере форм и все писать руками, но может так оно и к лучшему. Убрал нафиг BindingSource у грида, поскольку смысла теперь в нем нет, т.к. заполняю все руками, создал один TableAdapter, в нем — 2 селекта: один для получения списка команд, другой — для получения результатов матчей. По результатам первого динамически строятся колонки и строки грида, по результатам второго — заполняются соответствуюищие ячейки.
Это правильное решение.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.