Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]Zapytanie SQLowe...
Forum PHP.pl > Forum > Bazy danych
Master Miko
Witam,
Tworzę (raczej rozwijam) mały projekcik naliczania punktów (dla mojego klanu) za udział w meczach, treningach i sparingach...

Nie wiem czy to dobra koncepcja ustawenia tabel, ale wczoraj wymyśliłem to tak:

4 Tabele: matches_type, matches, match_users, users

Tabela matches_type:
id | type | win_rate | lost_rate | draw_rate | default_rate

Tabela matches:
id | type_id | date | opponent | status | bonus

Tabela users:
id | nick | email

Tabela matches_users:
match_id | user_id

Cały proces będzie wyglądał tak:
Tworzymy userów w tabeli users. Email będzie służył do funkcji mail().
Tworzymy typ meczu (np "Liga ESL") w matches_type i definiujemy paramety.
Tworzymy mecz - ustalamy jego typ z tabeli matches_type i ustawiamy parametry. Teraz pod tym mamy wszystkich użytkowników i checkboxy - wybieramy jakiego chcemy dodać. Klikamy submit. Teraz skrypt dodaje informacje do tabeli matches oraz wiąże mecz z userem w tabeli matches_users. Cały pomysł jest w tym, żeby definiować typ i mecz, ale wiązać usera i mecz w innej tabeli (matches_users) - tak jest chyba najlogiczniej, bo kretyństwem by było tworzenie dla każdego usera meczu...

I takie małe pytanko. Jak teraz obliczyć ilość wszystkich userów smile.gif
Nie wiem jakie to byłoby zapytnie ale zaczynałoby się SELECT (cośtam) FROM users ... i dalej łączynie czyli:

users->matches_users->matches->matches_type
czyli:
Dane o użytkowniku->w jakich meczach grał->dla każdego meczu pobieramy dane o typie meczu, ewentualnym bonusie i wyniku meczu->pobieramy dane ile gracz dostaje punktów wg parametrów meczu.

BARDZO proszę zaawanoswanych phpistów o ocenę tego rozwiązania - czy to ma sens i czy będzie wygodne + wydajne :/

PS. Jeśli to zły dział, to przepraszam, ale nie miałem pojęcia gdzie to włożyć sad.gif

PS.2: W tabeli users możnaby jeszcze zrobić pole "cache_points" tzn skrypt podliczałby punkty dla wszystkich tylko przy dodawaniu meczów, i punkty dopisywałby do "cache_points", żeby za każdym razem nie obliczał - gdy wartości się nie zmieniają.
Dzięki, pzdr
Miko
splatch
Wrzuć strukturę + przykładowe dane, ułatwi to innym testowanie ...
thornag
Jak mowil poprzednik, pokaz jakis kod.

Co do bazy danych wydaje mi sie ze jest odpowiednio zaprojektowana. tabele przedstawiaja pojedyncze rzeczy, do tego tabele relacji powinno byc wporzadku tylko zadbaj o dobre typy danych.

Cytat
I takie małe pytanko. Jak teraz obliczyć ilość wszystkich userów


Co rozumiesz przez ilosc userow ? Bo sie troche zamotalem w Twoim opisie. Ilosc userow to po prostu
  1. SELECT count(id) FROM users

Aczkolwiek spodziewam sie ze nie o to Ci chodzilo, napisz troche wyrazisciej winksmiley.jpg prosze.


P.S. Na WNC-Squad i tak Ci nic nie pomoze smile.gif
Master Miko
W moje pytanie wkradł się błąd

Chodziło mi o: Jak teraz obliczyć ilość wszystkich PUNKTÓW userów biggrin.gif

DAne zaraz podaje


Cytat
Na WNC-Squad i tak Ci nic nie pomoze

Wygraliśmy z WNC tongue.gif

Oto struktura + przykładowe dane z tabel:


  1. -- phpMyAdmin SQL Dump
  2. -- version 2.6.4-pl2
  3. --
  4. -- Host: localhost
  5. -- Generation Time: Sep 01, 2006 at 10:04 PM
  6. -- Server version: 4.1.14
  7. -- php Version: 4.3.11
  8. --
  9. -- Database: `miko_strefa24`
  10. --
  11.  
  12. -- --------------------------------------------------------
  13.  
  14. --
  15. -- Table structure for table `matches`
  16. --
  17.  
  18. CREATE TABLE `matches` (
  19. `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  20. `type_id` int(11) NOT NULL DEFAULT '0',
  21. `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  22. `opponent` varchar(250) NOT NULL DEFAULT '',
  23. `status` SET('win','lost','draft') NOT NULL DEFAULT '',
  24. `bonus` int(5) NOT NULL DEFAULT '0',
  25. PRIMARY KEY (`id`)
  26. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=4 ;
  27.  
  28. --
  29. -- Dumping data for table `matches`
  30. --
  31.  
  32. INSERT INTO `matches` (`id`, `type_id`, `data`, `opponent`, `status`, `bonus`) VALUES (1, 1, '2006-09-01 21:09:09', 'WNC', 'win', 100);
  33. INSERT INTO `matches` (`id`, `type_id`, `data`, `opponent`, `status`, `bonus`) VALUES (2, 3, '2006-09-01 21:09:09', 'WWW', 'lost', 0);
  34. INSERT INTO `matches` (`id`, `type_id`, `data`, `opponent`, `status`, `bonus`) VALUES (3, 1, '2006-09-01 21:10:03', 'ROE', 'draft', 0);
  35.  
  36. -- --------------------------------------------------------
  37.  
  38. --
  39. -- Table structure for table `matches_type`
  40. --
  41.  
  42. CREATE TABLE `matches_type` (
  43. `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  44. `type` varchar(250) NOT NULL DEFAULT '',
  45. `win_rate` int(5) NOT NULL DEFAULT '0',
  46. `lost_rate` int(5) NOT NULL DEFAULT '0',
  47. `draw_rate` int(5) NOT NULL DEFAULT '0',
  48. `default_rate` int(5) NOT NULL DEFAULT '0',
  49. PRIMARY KEY (`id`)
  50. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=6 ;
  51.  
  52. --
  53. -- Dumping data for table `matches_type`
  54. --
  55.  
  56. INSERT INTO `matches_type` (`id`, `type`, `win_rate`, `lost_rate`, `draw_rate`, `default_rate`) VALUES (1, 'ESL Premiership', 700, 200, 400, 0);
  57. INSERT INTO `matches_type` (`id`, `type`, `win_rate`, `lost_rate`, `draw_rate`, `default_rate`) VALUES (2, 'Trening', 0, 0, 0, 450);
  58. INSERT INTO `matches_type` (`id`, `type`, `win_rate`, `lost_rate`, `draw_rate`, `default_rate`) VALUES (3, 'TWL 4vs4', 500, 100, 350, 0);
  59. INSERT INTO `matches_type` (`id`, `type`, `win_rate`, `lost_rate`, `draw_rate`, `default_rate`) VALUES (4, 'TWL 6vs6', 450, 150, 350, 0);
  60. INSERT INTO `matches_type` (`id`, `type`, `win_rate`, `lost_rate`, `draw_rate`, `default_rate`) VALUES (5, 'Sparing', 400, 100, 200, 0);
  61.  
  62. -- --------------------------------------------------------
  63.  
  64. --
  65. -- Table structure for table `matches_users`
  66. --
  67.  
  68. CREATE TABLE `matches_users` (
  69. `match_id` int(11) NOT NULL DEFAULT '0',
  70. `user_id` int(11) NOT NULL DEFAULT '0',
  71. PRIMARY KEY (`match_id`,`user_id`)
  72. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  73.  
  74. --
  75. -- Dumping data for table `matches_users`
  76. --
  77.  
  78. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (1, 2);
  79. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (1, 3);
  80. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (1, 5);
  81. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (1, 6);
  82. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (1, 7);
  83. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (1, 8);
  84. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (2, 1);
  85. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (2, 2);
  86. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (2, 4);
  87. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (2, 5);
  88. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (3, 1);
  89. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (3, 2);
  90. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (3, 5);
  91. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (3, 6);
  92. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (3, 7);
  93. INSERT INTO `matches_users` (`match_id`, `user_id`) VALUES (3, 8);
  94.  
  95. -- --------------------------------------------------------
  96.  
  97. --
  98. -- Table structure for table `users`
  99. --
  100.  
  101. CREATE TABLE `users` (
  102. `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  103. `nick` varchar(250) NOT NULL DEFAULT '',
  104. `email` varchar(250) NOT NULL DEFAULT '',
  105. PRIMARY KEY (`id`)
  106. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=9 ;
  107.  
  108. --
  109. -- Dumping data for table `users`
  110. --
  111.  
  112. INSERT INTO `users` (`id`, `nick`, `email`) VALUES (1, 'Gracz1', 'gracz1@strefa24.pl');
  113. INSERT INTO `users` (`id`, `nick`, `email`) VALUES (2, 'Gracz2', 'gracz2@strefa24.pl');
  114. INSERT INTO `users` (`id`, `nick`, `email`) VALUES (3, 'Gracz3', 'gracz3@strefa24.pl');
  115. INSERT INTO `users` (`id`, `nick`, `email`) VALUES (4, 'Gracz4', 'gracz4@strefa24.pl');
  116. INSERT INTO `users` (`id`, `nick`, `email`) VALUES (5, 'Gracz5', 'gracz5@strefa24.pl');
  117. INSERT INTO `users` (`id`, `nick`, `email`) VALUES (6, 'Gracz6', 'gracz6@strefa24.pl');
  118. INSERT INTO `users` (`id`, `nick`, `email`) VALUES (7, 'Gracz7', 'gracz7@strefa24.pl');
  119. INSERT INTO `users` (`id`, `nick`, `email`) VALUES (8, 'Gracz8', 'gracz8@strefa24.pl');
splatch
  1. SELECT u.*,
  2. IF(m.STATUS = 'win', mt.win_rate, -mt.lost_rate) AS rate,
  3. IF(m.STATUS = 'win', m.bonus, 0) AS bonus
  4. FROM matches_users AS mus
  5. INNER JOIN users u ON u.id = mus.user_id
  6. INNER JOIN matches m ON m.id = mus.match_id
  7. INNER JOIN matches_type mt ON mt.id = m.type_id
  8. WHERE u.id = 2

dalej nie udało mi się dojść
revyag
Przenoszę na bazy danych
Master Miko
@revyag: Dzięki
@splatch: Tylko w systemie oceniania założenia są takie:
Punkty zawsze są dodatnie (lost_rate też), więc nawet jak gracze przegrają dostają punkty za samo wzięcie udziału w meczu. Default rate służy do tego, że jeśli nie ma ustalonych win/lost/draft rate'ów, wtedy jest używane (tu chodzi o treningi, dostaje się punkty za samo bycie).

Strasznie wielkie dzięki - to zapytanie SQL jest potężne :|
splatch
No to sprawa się upraszcza smile.gif
  1. SELECT u.*, SUM(mt.lost_rate + m.bonus) AS mysum
  2. FROM matches_users AS mus
  3. INNER JOIN users u ON u.id = mus.user_id
  4. INNER JOIN matches m ON m.id = mus.match_id
  5. INNER JOIN matches_type mt ON mt.id = m.type_id GROUP BY u.id


Jeśli chcesz policzyć to samo dla 1 użtkownika wstaw WHERE. Pamiętaj tylko by group by zostało, gdy korzystasz pobierasz inne kolumny.
Po odpowiedniej modyfikacji możesz pobrać jednocześnie ilość wszystkich punktów zdobytych przez klan.

  1. SELECT
  2. SUM(mt.lost_rate + m.bonus) AS mysum
  3. FROM matches_users AS mus
  4. INNER JOIN users u ON u.id = mus.user_id
  5. INNER JOIN matches m ON m.id = mus.match_id
  6. INNER JOIN matches_type mt ON mt.id = m.type_id WHERE u.id = 2
  7. UNION SELECT
  8. SUM(mt.lost_rate + m.bonus) AS mysum
  9. FROM matches_users AS mus
  10. INNER JOIN users u ON u.id = mus.user_id
  11. INNER JOIN matches m ON m.id = mus.match_id
  12. INNER JOIN matches_type mt ON mt.id = m.type_id
SongoQ
@splatch * w SELECT jest nieefektywna. Dodatkowo agregacja danych z innymi polami wymaga uzycia wszystkich pol w group by a nie samego id (mowie tu o 1 przykladzie).
splatch
@SongoQ kto chce sobie dodać * to sobie doda, to jest tylko działający przykład.
Jeśli idzie o Group by - mówimy o MySQL. Wszystkie kolumny nie są potrzebne.
SongoQ
Cytat
Jeśli idzie o Group by - mówimy o MySQL. Wszystkie kolumny nie są potrzebne.

Owszem dziala, ale w PG czy ORACLE to jest nieporzadany efekt.

Maly przykladzik:

  1. CREATE TABLE `test` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(200) NOT NULL,
  4. `position` int(11) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. )


Kilka rekordow:
  1. INSERT INTO `test` (`id`, `name`, `position`) VALUES (1, 'aaa', 1),
  2. (6, 'aaa', 2),
  3. (2, 'bbb', 5),
  4. (3, 'ccc', 2),
  5. (4, 'ddd', 3),
  6. (5, 'eee', 4);


I zapytanie ktore wybierze ilosci pogrupowane po name ale dodatkowo dokladamy pole position

  1. SELECT COUNT( * ) , name, position
  2. FROM `test` GROUP BY name


Zobacz jaki wynik dostajesz:
COUNT(*) | name | position
2 aaa 1
1 bbb 5
1 ccc 2
1 ddd 3
1 eee 4

Count(*) dla grupy aaa jest 2 lecz na pozycji position mamy 1, tak naprawde mamy 2 wartosci 1 i 2, dzieje sie dlatego tak ze dolozone pola w select brane sa z pierwszego wystapienia rekordu czyli najmniejszy rowid. Takie wykorzystanie czesto jest mylace i moze powodowac bledy w aplikacji. Wiec jesli jawnie bazka bedzie mi krzyczec ze nie dodalem do grupy danego pola wiem wtedy ze to zadziala. Choc z 2 strony na pewno znalazly by sie przekladny ktore sa za stosowaniem czegos takiego.
splatch
SongoQ nie musisz mi tego tłumaczyć ani udowadniać ponieważ wiem o tym. W zrzucie struktury stoi jak byk napisane phpMyAdmin SQL Dump.

Nie mam zamiaru o tym dłużej dyskutować ponieważ uważam Twój udział w tym temacie za nieuzasadniony. Nic nie wniosłeś a narobiłeś tylko fermentu, zamiast zająć się problemem Master Miko. Ponadto starasz się za wszelką cenę udowodnić mi niewiedzę.

Jeśli na takiej zasadzie ma działać to forum to dziękuję bardzo. Z mojej strony to EOT w tym wątku i na "Bazach danych".
SongoQ
Cytat
SongoQ nie musisz mi tego tłumaczyć ani udowadniać ponieważ wiem o tym

My o tym wiemy ale nie wszyscy moga o tym wiedziec, napisalem o niebezpieczenstie stosowania czegos takiego.

Cytat
Ponadto starasz się za wszelką cenę udowodnić mi niewiedzę.

To nie bylo celem tego posta. Jesli moj post Cie jakos obrazil to bardzo przepraszam.
Master Miko
Serdecznie dziękuję Ci splatch. Naprawde to co zrobiłeś jest genialne smile.gif
Dziękuję za poświęcenie Waszego czasu w celu ustalenia właściwego zapytania dla tych tabel.

PS1: Czemu w SUM jest tylko samo lost_rate + bonus? czy to działa również z win_rate i draft_rate? Jednak chyba będzie trzeba zastoswać ify, bo przecież trzeba najpierw pobrać czy mecz jest wygrany/przegrany/remis/inny typ i dopiero wtedy ustawić stawkę rate_

PS2: Powiem tak. Nie wiem o * w selectach, zawsze używałem, więc serdecznie proszę o jakiś link czemu tego nie stosować sad.gif
Czy w tym przykładzie będzie to jakiś problem?

PS3: Ponownie podaje dane SQL z dumpa (parę rzeczy się zmieniło)

  1. -- phpMyAdmin SQL Dump
  2. -- version 2.8.0.2
  3. --
  4. -- Host: localhost
  5. -- Generation Time: Sep 06, 2006 at 02:59 PM
  6. -- Server version: 4.1.21
  7. -- php Version: 4.4.2
  8. --
  9. -- Database: `miko_strefa24`
  10. --
  11.  
  12. -- --------------------------------------------------------
  13.  
  14. --
  15. -- Table structure for table `matches`
  16. --
  17.  
  18. CREATE TABLE `matches` (
  19. `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  20. `type_id` int(11) NOT NULL DEFAULT '0',
  21. `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  22. `opponent` varchar(250) NOT NULL DEFAULT '',
  23. `status` SET('win','lost','draft','default') NOT NULL DEFAULT '',
  24. `bonus` int(5) NOT NULL DEFAULT '0',
  25. PRIMARY KEY (`id`)
  26. ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin2 AUTO_INCREMENT=5 ;
  27.  
  28. --
  29. -- Dumping data for table `matches`
  30. --
  31.  
  32. INSERT INTO `matches` VALUES (1, 1, '2006-09-01 21:09:09', 'WNC', 'win', 100);
  33. INSERT INTO `matches` VALUES (2, 3, '2006-09-01 21:09:09', 'WWW', 'lost', 0);
  34. INSERT INTO `matches` VALUES (3, 1, '2006-09-01 21:10:03', 'ROE', 'draft', 0);
  35. INSERT INTO `matches` VALUES (4, 2, '2006-09-06 14:56:24', 'Trening', 'default', 0);
  36.  
  37. -- --------------------------------------------------------
  38.  
  39. --
  40. -- Table structure for table `matches_type`
  41. --
  42.  
  43. CREATE TABLE `matches_type` (
  44. `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  45. `type` varchar(250) NOT NULL DEFAULT '',
  46. `win_rate` int(5) NOT NULL DEFAULT '0',
  47. `lost_rate` int(5) NOT NULL DEFAULT '0',
  48. `draw_rate` int(5) NOT NULL DEFAULT '0',
  49. `default_rate` int(5) NOT NULL DEFAULT '0',
  50. PRIMARY KEY (`id`)
  51. ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin2 AUTO_INCREMENT=6 ;
  52.  
  53. --
  54. -- Dumping data for table `matches_type`
  55. --
  56.  
  57. INSERT INTO `matches_type` VALUES (1, 'ESL Premiership', 700, 200, 400, 0);
  58. INSERT INTO `matches_type` VALUES (2, 'Trening', 0, 0, 0, 450);
  59. INSERT INTO `matches_type` VALUES (3, 'TWL 4vs4', 500, 100, 350, 0);
  60. INSERT INTO `matches_type` VALUES (4, 'TWL 6vs6', 450, 150, 350, 0);
  61. INSERT INTO `matches_type` VALUES (5, 'Sparing', 400, 100, 200, 0);
  62.  
  63. -- --------------------------------------------------------
  64.  
  65. --
  66. -- Table structure for table `matches_users`
  67. --
  68.  
  69. CREATE TABLE `matches_users` (
  70. `match_id` int(11) NOT NULL DEFAULT '0',
  71. `user_id` int(11) NOT NULL DEFAULT '0',
  72. PRIMARY KEY (`match_id`,`user_id`)
  73. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  74.  
  75. --
  76. -- Dumping data for table `matches_users`
  77. --
  78.  
  79. INSERT INTO `matches_users` VALUES (1, 2);
  80. INSERT INTO `matches_users` VALUES (1, 3);
  81. INSERT INTO `matches_users` VALUES (1, 5);
  82. INSERT INTO `matches_users` VALUES (1, 6);
  83. INSERT INTO `matches_users` VALUES (1, 7);
  84. INSERT INTO `matches_users` VALUES (1, 8);
  85. INSERT INTO `matches_users` VALUES (2, 1);
  86. INSERT INTO `matches_users` VALUES (2, 2);
  87. INSERT INTO `matches_users` VALUES (2, 4);
  88. INSERT INTO `matches_users` VALUES (2, 5);
  89. INSERT INTO `matches_users` VALUES (3, 1);
  90. INSERT INTO `matches_users` VALUES (3, 2);
  91. INSERT INTO `matches_users` VALUES (3, 5);
  92. INSERT INTO `matches_users` VALUES (3, 6);
  93. INSERT INTO `matches_users` VALUES (3, 7);
  94. INSERT INTO `matches_users` VALUES (3, 8);
  95. INSERT INTO `matches_users` VALUES (4, 1);
  96. INSERT INTO `matches_users` VALUES (4, 2);
  97. INSERT INTO `matches_users` VALUES (4, 3);
  98. INSERT INTO `matches_users` VALUES (4, 6);
  99. INSERT INTO `matches_users` VALUES (4, 7);
  100. INSERT INTO `matches_users` VALUES (4, 8);
  101.  
  102. -- --------------------------------------------------------
  103.  
  104. --
  105. -- Table structure for table `users`
  106. --
  107.  
  108. CREATE TABLE `users` (
  109. `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  110. `nick` varchar(250) NOT NULL DEFAULT '',
  111. `email` varchar(250) NOT NULL DEFAULT '',
  112. PRIMARY KEY (`id`)
  113. ) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin2 AUTO_INCREMENT=9 ;
  114.  
  115. --
  116. -- Dumping data for table `users`
  117. --
  118.  
  119. INSERT INTO `users` VALUES (1, 'Gracz1', 'gracz1@strefa24.pl');
  120. INSERT INTO `users` VALUES (2, 'Gracz2', 'gracz2@strefa24.pl');
  121. INSERT INTO `users` VALUES (3, 'Gracz3', 'gracz3@strefa24.pl');
  122. INSERT INTO `users` VALUES (4, 'Gracz4', 'gracz4@strefa24.pl');
  123. INSERT INTO `users` VALUES (5, 'Gracz5', 'gracz5@strefa24.pl');
  124. INSERT INTO `users` VALUES (6, 'Gracz6', 'gracz6@strefa24.pl');
  125. INSERT INTO `users` VALUES (7, 'Gracz7', 'gracz7@strefa24.pl');
  126. INSERT INTO `users` VALUES (8, 'Gracz8', 'gracz8@strefa24.pl');


A teraz opis jak to ma działać:
Jeśli status meczu win: win_rate + bonus
Jeśli status meczu lost: lost_rate + bonus
Jeśli status meczu draw: draw_rate + bonus
Jeśli status meczu default (to w przypadku treningu): default_rate + bonus
I tak niestety trzeba traktować każdy wpis z matches_users i sumować te punkty :/

Coś w tym stylu jak na początku, ale z SUM:

  1. SELECT u.*,
  2. m.bonus AS bonus,
  3. IF(m.STATUS = 'win', mt.win_rate, 0) AS rate,
  4. IF(m.STATUS = 'draw', mt.draw_rate, 0) AS rate,
  5. IF(m.STATUS = 'lost', mt.lost_rate, 0) AS rate,
  6. IF(m.STATUS = 'default', mt.default_rate, 0) AS rate,
  7. FROM matches_users AS mus
  8. INNER JOIN users u ON u.id = mus.user_id
  9. INNER JOIN matches m ON m.id = mus.match_id
  10. INNER JOIN matches_type mt ON mt.id = m.type_id
  11. GROUP BY u.id


Już jestem blisko, ale te ify jakoś... nie mogę ich wdrożyć
SongoQ
Moze tak:

  1. IF(m.STATUS = 'win', mt.win_rate + m.bonus, 0) AS rate,
Master Miko
Zrobiłem coś takiego:

DZIAŁA, ale źle liczy... coś jest nie tak :/

  1. SELECT u.*,
  2. sum(
  3. IF(m.STATUS = 'win', mt.win_rate, 0) +
  4. IF(m.STATUS = 'lost', mt.lost_rate, 0) +
  5. IF(m.STATUS = 'draw', mt.draw_rate, 0) +
  6. IF(m.STATUS = 'default', mt.default_rate, 0)
  7. + 0) AS rate,
  8. sum(m.bonus) AS bonus
  9. FROM matches_users AS mus
  10. INNER JOIN users u ON u.id = mus.user_id
  11. INNER JOIN matches m ON m.id = mus.match_id
  12. INNER JOIN matches_type mt ON mt.id = m.type_id
  13. GROUP BY u.id


Ktoś pomoże? :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.