Задался целью написать программку для ведения таблиц, например, футбольных чемпионатов. Необходимый минимум для таблицы — слева набор команд, сверху набор команд, в ячейках — счет матчей. Ну и пара столбцов для мячей, очков и.т.д. В общем, кто немного знаком с футболом — понял что я хочу.
Вопрос по SQL
Так вот, как лучше всего результаты матчей хранить в БД? Ничего лучше пока не придумал, как в одной строке хранить 4 команды (допустим что всего 4 команды) и 3 результата матчей, например,
команда1 | команда2 | команда3| команда4 | счет1 | счет2 | счет3
Это будет значить что "команда1" сыграла с "командой2" со счетом "счет1", "команда1" сыграла с "командой3" со счетом "счет2" и "команда1" сыграла с "командой4" со счетом "счет3".
Вопрос по C# (VS 2008)
Как это все дело засунуть в DataGridView? Возможно ли это вообще. То, что у меня на данный момент получилось — в приложенном файле. В принципе ничего, только часть столбцов (названия команд) надо вынести в заголовки соответствующих столбцов со счетом...
Спасибо большое, если ответите хотя бы на один из вопросов!!
Здравствуйте, 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>Спасибо большое, если ответите хотя бы на один из вопросов!!
Здравствуйте, _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_>счет
Да, я так вначале и делал. А как тогда написать запрос который бы выводил в первой строке названия команд, в первом столбце — тоже названия команд, а в "середине" таблицы — счет матчей между ними?
anton-09 wrote:
> Да, я так вначале и делал. А как тогда написать запрос который бы > выводил в первой строке названия команд, в первом столбце — тоже > названия команд, а в "середине" таблицы — счет матчей между ними?
Поди студент? Лабораторку делаешь? Подсказка — найди что такое alias для имени таблицы, что такое join и как можно использовать одну таблицу в одном запросе дважды.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ., Вы писали:
.>Поди студент? Лабораторку делаешь? Подсказка — найди что такое alias для имени таблицы, что такое join и как можно использовать одну таблицу в одном запросе дважды.
Здравствуйте, 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>Да, я так вначале и делал. А как тогда написать запрос который бы выводил в первой строке названия команд, в первом столбце — тоже названия команд, а в "середине" таблицы — счет матчей между ними?
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
Всё, что нас не убивает, ещё горько об этом пожалеет.
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. Для юзера с многозначительным ником "." — нет, не студент, а аспирант, но это несущественно, т.к. прогу пишу для себя, чтобы вспомнить шарп. Про алиас и джойн — посмотри мой запрос.
Здравствуйте, _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-запросом ?
Да, и выше я написал как это делается (правда написал случайно под анонимом)
Здравствуйте, <Аноним>, Вы писали: А>Как же здесь медленно отвечают. Я уж и забыл, что сюда тоже кидал вопрос
Ну, так это не чат. А>В общем проблема решена двояко.
А>1. Простое решение с точки зрения кодирования, но сложное с точки зрения SQL —
Читать про PIVOT. А>2. Сложное решение с точки зрения кодирования, и легкое с точки зрения SQL А>Пришлось забыть о дизайнере форм и все писать руками, но может так оно и к лучшему. Убрал нафиг BindingSource у грида, поскольку смысла теперь в нем нет, т.к. заполняю все руками, создал один TableAdapter, в нем — 2 селекта: один для получения списка команд, другой — для получения результатов матчей. По результатам первого динамически строятся колонки и строки грида, по результатам второго — заполняются соответствуюищие ячейки.
Это правильное решение.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.