Created
          May 4, 2012 12:25 
        
      - 
      
- 
        Save meeDamian/2594514 to your computer and use it in GitHub Desktop. 
    [ MySQL | bugs ] Wyciąganie najnowszego rekordu z bazy danych
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | -- tabela | |
| CREATE TABLE winners( | |
| id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, | |
| cid BIGINT UNSIGNED NOT NULL, -- Contest ID - id konkursu | |
| eid BIGINT UNSIGNED NOT NULL, -- Entry ID - id wpisu w tym konkursie | |
| place INT NOT NULL, -- którym miejscem został oznaczony przez moderatora | |
| uts DECIMAL(17,3) NOT NULL, | |
| PRIMARY KEY(id) | |
| ); | |
| -- TODO: wyciągnij wszystkie najnowsze wpisy (uts to timestamp, używam decimal, bo mysql nie rozumie milisekund...) | |
| -- każdy konkurs składa się z wpisów, moderator może dowolnie modyfikować miejsce, a każdą zmianę notuję | |
| -- muszę wyciągnąć tylko najnowsze (z największym uts) wpisy dla kombinacji cid+eid | |
| -- jak teoretycznie powinno działać: | |
| SELECT eid, place, max(uts) FROM winners WHERE cid=22 GROUP BY eid; | |
| -- Q: czemu nie działa? | |
| -- A: bo mysql jest głupie i nawet gdy w wyniku zwróci poprawny (największy) uts, to pozostałe dane są pierwszymi jakie wystapiły w tabeli (nie pasują rzędem do uts)... | |
| -- aktualne rozwiązanie: | |
| SELECT * FROM winners w WHERE uts IN (SELECT MAX(uts) FROM winners WHERE cid=22 GROUP BY eid) AND place!=0 AND cid=22 ORDER BY place; | |
| -- Q: dlaczego ejst chujowe? | |
| -- A: bo zadziała tylko dla unikalnych timestampów, które przy większym ruchu wcale nie muszą być unikalne | |
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment