2015-07-08 3 views
1

Я пишу базу данных для управления таблицей спортивной лиги, для которой требуется отдельная вкладка для хранения деталей случайных вариаций точек, которые выходят за пределы обычной логики расчета таблицы лиг.MYSQL присоединяется к выбору запроса

Две таблицы у меня есть

CREATE TABLE IF NOT EXISTS `fixtures` (
    `id` int(6) unsigned NOT NULL AUTO_INCREMENT, 
    `comp_id` int(6) NOT NULL, 
    `date` date DEFAULT NULL, 
    `time` time DEFAULT NULL, 
    `hteam_id` int(6) DEFAULT NULL, 
    `ateam_id` int(6) DEFAULT NULL, 
    `hscore1` int(6) DEFAULT NULL, 
    `ascore1` int(6) DEFAULT NULL, 
    `hscore2` int(6) DEFAULT NULL, 
    `ascore2` int(6) DEFAULT NULL, 
    `hbonus` int(6) NOT NULL, 
    `abonus` int(6) NOT NULL, 
    `played` varchar(2) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=30 ; 

CREATE TABLE IF NOT EXISTS `pointsadjust` (
    `id` int(6) unsigned NOT NULL AUTO_INCREMENT, 
    `fix_id` int(6) DEFAULT NULL, 
    `team_id` int(6) DEFAULT NULL, 
    `value` int(6) DEFAULT NULL, 
    `reason` varchar(75) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

Запрос я использую, чтобы стянуть таблица лига

SELECT 
    tname AS Team, Sum(P) AS P,Sum(W) AS W,Sum(D) AS D,Sum(L) AS L, 
    SUM(F) as F,SUM(A) AS A,SUM(SD) AS SD,SUM(BP) AS BP,SUM(Pts)+SUM(BP) AS Pts, SUM(((Pts+BP)*10000)+(W*100)+(SD*10)+((F/P)*1)) AS Rank 
FROM(
    SELECT 
    hteam_id Team, 
    1 P, 
    IF(hscore1 > ascore1,1,0) W, 
    IF(hscore1 = ascore1,1,0) D, 
    IF(hscore1 < ascore1,1,0) L, 
    hscore1 F, 
    ascore1 A, 
    hscore1-ascore1 SD, 
    hbonus BP, 
    CASE WHEN hscore1 > ascore1 THEN 2 WHEN hscore1 = ascore1 THEN 1 ELSE 0 END PTS 
    FROM fixtures WHERE comp_id = '1' AND played = 'N' 
    UNION ALL 
    SELECT 
    ateam_id, 
    1, 
    IF(hscore1 < ascore1,1,0), 
    IF(hscore1 = ascore1,1,0), 
    IF(hscore1 > ascore1,1,0), 
    ascore1, 
    hscore1, 
    ascore1-hscore1, 
    abonus, 
    CASE WHEN hscore1 < ascore1 THEN 2 WHEN hscore1 = ascore1 THEN 1 ELSE 0 END 
    FROM fixtures WHERE comp_id = '1' AND played = 'N' 
) as tot 
JOIN teams t ON tot.Team=t.id 
GROUP BY Team 
ORDER BY Rank DESC 

Я изо всех сил, чтобы создать второй присоединиться, чтобы принести в данных таблица корректирует точки, чтобы внести корректировки в таблицу лиг.

Помогите пожалуйста?

+0

вы можете деформировать его один большой выбор, а затем внутренние присоединиться к нему с другой таблицей – Proxytype

ответ

0

Лучший способ заменить ваш блок кода подзапроса «tot» для этого и указать на новый столбец «Pts_Adjst» (ведьма держит отрегулированную пунктуацию) вместо «Pts» (« ваниль»пунктуация):

SQL скрипка (пример): http://sqlfiddle.com/#!9/c7a3c/14

SELECT 
#tname AS Team, 
Team TeamiD, 
Sum(P) AS P,Sum(W) AS W,Sum(D) AS D,Sum(L) AS L, 
SUM(F) as F,SUM(A) AS A,SUM(SD) AS SD,SUM(BP) AS BP,SUM(Pts_Adjst)+SUM(BP) AS Pts, SUM(((Pts_Adjst+BP)*10000)+(W*100)+(SD*10)+((F/P)*1)) AS Rank 
FROM(SELECT tot.*, CASE WHEN pointsadjust.value is not null THEN pointsadjust.value ELSE PTS END PTS_ADJST, pointsadjust.reason FROM (
SELECT 
hteam_id Team, 
id Fix, 
1 P, 
IF(hscore1 > ascore1,1,0) W, 
IF(hscore1 = ascore1,1,0) D, 
IF(hscore1 < ascore1,1,0) L, 
hscore1 F, 
ascore1 A, 
hscore1-ascore1 SD, 
hbonus BP, 
CASE WHEN hscore1 > ascore1 THEN 2 WHEN hscore1 = ascore1 THEN 1 ELSE 0 END PTS 
FROM fixtures WHERE comp_id = '1' AND played = 'N' 
UNION ALL 
SELECT 
ateam_id, 
id Fix, 
1, 
IF(hscore1 < ascore1,1,0), 
IF(hscore1 = ascore1,1,0), 
IF(hscore1 > ascore1,1,0), 
ascore1, 
hscore1, 
ascore1-hscore1, 
abonus, 
CASE WHEN hscore1 < ascore1 THEN 2 WHEN hscore1 = ascore1 THEN 1 ELSE 0 END 
FROM fixtures WHERE comp_id = '1' AND played = 'N' 
) as tot 
LEFT JOIN pointsadjust 
ON tot.Team = pointsadjust.team_id AND tot.Fix = pointsadjust.Fix_id) as tot 
#JOIN teams t ON tot.Team=t.id 
GROUP BY Team 
ORDER BY Rank DESC 
+0

Спасибо за вашу помощь. Регулировка точек происходит на светильниках, которые не воспроизводятся так, что в таблице приборов в поле игры установлено значение «N». Если это включено в SELECT, то прибор не будет найден с соединением в качестве того же идентификатора, который используется в таблице настройки точек. Можно ли исключить совпадение из таблицы лиги, но восстановить настройки точек из таблицы pointadjust? –

Смежные вопросы