Я пытаюсь сохранить результаты карточной игры матчей (всегда с 3 игроками) в PotsgreSQL 8.4.9
У меня есть почти все (смотри ниже, пожалуйста), только 2 второстепенные части отсутствуют.
- Сначала я пытаюсь создать процедуру PL / pgSQL для сохранения результатов
- А затем мне нужно заявление о выборе соединения, чтобы получить дату матча, имена игроков, пол, аватары, очки и, если игрок преждевременно вышел из игры
Я создал 3 таблицы SQL:
create table pref_users (
uid varchar(32) primary key,
first_name varchar(64),
female boolean,
avatar varchar(128)
}
create table pref_games {
gid serial,
rounds integer not null,
finished timestamp default current_timestamp
}
create table pref_scores (
uid varchar(32) references pref_users,
gid serial references pref_games, /* XXX serial ok here? */
money integer not null,
quit boolean
);
Вот моя процедура PL / pgSQL, где мне нужна помощь, пожалуйста:
create or replace function pref_insert_scores(
_uid0 varchar, _money0 integer, _quit0 boolean,
_uid1 varchar, _money1 integer, _quit1 boolean,
_uid2 varchar, _money2 integer, _quit2 boolean,
_rounds integer) returns void as $BODY$
begin
insert into pref_games (rounds) values (_rounds);
-- XXX how do I get the _gid of this new game?
insert into pref_scores (uid, gid, money, quit)
values(_uid0, _gid, _money0, _quit0);
insert into pref_scores (uid, gid, money, quit)
values(_uid1, _gid, _money1, _quit1);
insert into pref_scores (uid, gid, money, quit)
values(_uid2, _gid, _money2, _quit2);
end;
$BODY$ language plpgsql;
А затем мне нужна помощь, чтобы объединить результаты с данными first_name, female, avatar из первой таблицы, чтобы я мог отобразить список сыгранных игр за последние 7 дней в таблице на веб-странице:
01.12.2011 Alice $10 Bob $20 Charlie -$30 17 rounds
01.12.2011 Alice $0 (quit) Bob $20 Charlie -$20 5 rounds
UPDATE:
С мю слишком короткая помощь Теперь мои таблицы заполнены данными, но я все еще не могу понять, как составить список всех игр, выполненных игроком - вместе с его 2 противниками и их баллы.
У меня есть таблица со всеми играми:
# select * from pref_games limit 5;
gid | rounds | finished
-----+--------+----------------------------
1 | 10 | 2011-10-26 14:10:35.46725
2 | 12 | 2011-10-26 14:34:13.440868
3 | 12 | 2011-10-26 14:34:39.279883
4 | 14 | 2011-10-26 14:35:25.895376
5 | 14 | 2011-10-26 14:36:56.765978
Тогда у меня есть все 3 игрока (и их оценки), которые участвовали в игре № 3:
# select * from pref_scores where gid=3;
uid | gid | money | quit
-----------------------+-----+-------+------
OK515337846127 | 3 | -37 | f
OK40798070412 | 3 | -75 | f
MR2871175175044094219 | 3 | 112 | f
И это все игры, в которые играет игрок с uid = DE9411:
# select * from pref_scores where id='DE9411';
uid | gid | money | quit
--------+-----+-------+------
DE9411 | 43 | 64 | f
DE9411 | 159 | -110 | f
DE9411 | 224 | 66 | f
DE9411 | 297 | -36 | f
DE9411 | 385 | 29 | f
DE9411 | 479 | -40 | f
DE9411 | 631 | -14 | f
DE9411 | 699 | 352 | f
DE9411 | 784 | -15 | f
DE9411 | 835 | 242 | f
Но как мне перечислить 2 других игроков и их результаты в приведенном выше наборе результатов?