![]() |
![]() |
-Gość.- |
![]()
Post
#1
|
Goście ![]() |
Witam,
Potrzebuje pomocy... Mam baze: ga.id valu. cat. rating 5593 3886 05 93 5998 2385 07 92 5527 5530 15 92 0004 1154 07 92 0110 0138 17 92 0039 0317 11 90 0150 0153 17 90 0102 0147 19 90 0039 0317 07 90 0062 1202 15 90 0106 0300 07 90 0062 1202 04 90 5565 0257 12 88 5731 0266 05 88 0088 0249 16 88 0043 0151 11 88 0105 0121 17 88 korzystając z tego kodu: $ocenagg = db::query("SELECT * FROM cache ORDER BY rating DESC LIMIT 24"); otrzymuje wyniki - jak zrobić gdy w kolumnie "g.id" jest to samo żeby już nie wyświetlał tego samego wyniku (np. 0039 0317 11 90 0039 0317 07 90 mamy dwa razy 39) - potrzebuje zrobić tak żeby nie wyświetlał jedno znich. Z góry dziękuję za pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 17.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
skoro masz takie same id w bazie to chyba cos nie tak . id powinno byc unikalne
|
|
|
-Gość.- |
![]()
Post
#3
|
Goście ![]() |
to jest id gry
wpisy do bazy są generowane w tej bazie automatycznie a powtarza się wpis ponieważ jest w dwuch lub trzech kategoriach ta sama gra (cat. - kategoria) |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
Ehh.. szkoda, że muszę tłumaczyć nawet tak proste rzeczy...
Poczytaj o DISTINCT w języku SQL ![]() Pozdrawiam! -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
-Gość.- |
![]()
Post
#5
|
Goście ![]() |
Ehh.. szkoda, że muszę tłumaczyć nawet tak proste rzeczy... Poczytaj o DISTINCT w języku SQL ![]() Pozdrawiam! Jeśli użyje DISTINCT w tym zapytaniu to usunie powtarzające się wyniki z "rating" a to jest ocena gry w % ("SELECT * FROM cache ORDER BY rating DESC LIMIT 24"); A mi zależy na pominięciu takiego samego id gry (ga.id) |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
Nie za bardzo rozumiem Twój tok myślenia.
Chcesz pominąć cały rekord który zawiera taki sam ga.id, czy jak? Może mógłbyś sprecyzować na czym polega Twój problem i jak ma owy system funkcjonować. Ten post edytował modern-web 27.03.2011, 16:32:25 -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
-Gość.- |
![]()
Post
#7
|
Goście ![]() |
Chcesz pominąć cały rekord który zawiera taki sam ga.id, czy jak? Tak... "SELECT * FROM cache ORDER BY rating DESC LIMIT 24" Potrzebuje z bazy "cache" 24 wyniki najwyższych z kolumny "rating" następnie wyciągam z tego "ga.id" id gry (jeśli się powtarza to chciałbym żeby nie wyświetlał) a pozostałe wyniki zostaną wykorzystane dalej. ga.id valu. cat. rating 5593 3886 05 93 - ok 5998 2385 07 92 - ok 5527 5530 15 92 - ok 0004 1154 07 92 - ok 0110 0138 17 92 - ok 0039 0317 11 90 - ok 0150 0153 17 90 - ok 0102 0147 19 90 - ok 0039 0317 07 90 - już mam id 39 - pomija 0062 1202 15 90 - ok 0106 0300 07 90 - ok 0062 1202 04 90 - już jest powyżej 5565 0257 12 88 - ok 5731 0266 05 88 - ok 0088 0249 16 88 - ok 0043 0151 11 88 - ok 0105 0121 17 88 - ok |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 511 Pomógł: 143 Dołączył: 13.03.2010 Skąd: Jasło Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT *, count(gaid) countId FROM cache GROUP BY gaid HAVING countId=1
Ten post edytował jaslanin 27.03.2011, 16:53:22 -------------------- Good luck and happy PHP'ing
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 30 Dołączył: 19.02.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
To co proponuje Jaslanin wyeliminuje te "gaid" za które masz > 1 wiersz.
Ty natomiast chcesz z takich "powtórzonych" wierszy wyciągnąć jeden. Spróbuj coś takiego: SELECT gaid, valu, cat, rating FROM cache GROUP BY gaid; Uwaga: W razie użycia GROUP BY niektóre systemy baz danych wymagają aby każda kolumna: 1. Albo była ujęta we frazie GROUP BY. 2. Albo była ujęta w liście SELECT z jakąś funkcją agregującą. W MySQL - jak widzę - takiego wymagania nie ma (co jest "trochę nieczyste koncepcyjnie", ale chodzi). Czasem (np. w MS Access) jest funkcja agregująca First i Last, ale w dokumentacji MySQL tych funkcji nie widzę. Edit: Jeszcze trochę poeksperymentowałem i doszedłem do czegoś takiego: Pierwsze subkwerenda wybiera 24 gaid'y z największymi ratingami. Druga doszukuje te ratingi. Dopiero trzecia wyszukuje pełne wiersze. Ten post edytował Valdi_B 27.03.2011, 17:55:16 |
|
|
-Gość.- |
![]()
Post
#10
|
Goście ![]() |
Dziękuję wszystkim ...
Początek kodu mi wystarczy: $ocenagg = db::query("SELECT DISTINCT(gameid) FROM cache ORDER BY rating DESC LIMIT 24"); while($witem = $ocenagg->fetch_assoc()){ $id = $witem['gameid']; Dziękuję wszystkim za pomoc... Możecie mi jeszcze podpowiedzieć jak zadać pytanie do bazy żeby pokazał wszystkie wyniki z danego dnia ale w bazie (date) mam zapisne tak: 2011-01-31 03:16:52 2011-01-31 03:16:54 2011-01-31 03:18:11 2011-01-31 03:18:13 Chciałbym żeby pokazał wszystkie z 2011-01-31 z wszystkich godzin w tym dniu. próbowałem tak ale nie działa. $ocenagg = db::query("SELECT * FROM stats WHERE date=('2011-03-27 23:59:59.999999', '1 1:1:1.000002')"); |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Kod $date = date('Y-m-d'); where DATE(date) = $date jeżeli chcesz inne dni to zapraszam do manuala i funkcji strtotime. Ten post edytował melkorm 28.03.2011, 19:16:50 -------------------- |
|
|
-Gość.- |
![]()
Post
#12
|
Goście ![]() |
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
RTFM
Wprzykładach wszystko jest, nawet następny dzień, a poprzedni robi się adekwatnie. + drugi parametr funkcji date. -------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Kod $date = date('Y-m-d', time() - 60*60*24*$liczba_dni); moim zdaniem skorzystanie z date dla Kolegi będzie bardziej intuicyjne - podobny przykład w manualu pod funkcją time -> 1 dzień = 60s*60min*24h... -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
-Gość.- |
![]()
Post
#15
|
Goście ![]() |
RTFM Wprzykładach wszystko jest, nawet następny dzień, a poprzedni robi się adekwatnie. + drugi parametr funkcji date. Użyłem tego: $date = strtotime ("-1 day"); $ocenagg = db::query("SELECT * FROM stats WHERE DATE(date)='$date'"); i nie działa... |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 690 Pomógł: 92 Dołączył: 6.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
-Gość.- |
![]()
Post
#17
|
Goście ![]() |
Kod $date = date('Y-m-d', time() - 60*60*24*$liczba_dni); moim zdaniem skorzystanie z date dla Kolegi będzie bardziej intuicyjne - podobny przykład w manualu pod funkcją time -> 1 dzień = 60s*60min*24h... Użyłem tego kodu $date = date('Y-m-d', time() - 60*60*24); $ocenagg = db::query("SELECT * FROM stats WHERE DATE(date)='$date'"); Pokazuje tylko z tego dnia ale tylko 1 godz. (między 00 a 01 godz.) 2011-03-27 00:02:58 2011-03-27 00:03:51 ... 2011-03-27 00:47:37 2011-03-27 00:49:32 |
|
|
-Gość.- |
![]()
Post
#18
|
Goście ![]() |
Nie wiem dlaczego ale mi to nie działa, próbowałem nawet: DATE_SUB(CURDATE(), INTERVAL 1 DAY) To działa prawidłowo: $date = date('Y-m-d', time() - 60*60*24*$liczba_dni); Wcześniej miałem proble ponieważ było ograniczenie if($i == 21) i myślałem że tylko pokazuje z jednej godziny. |
|
|
-Gość.- |
![]()
Post
#19
|
Goście ![]() |
Panowie jak już mam wyniki z danego dnia
id game_id date 87 5977 2011-03-27 00:15:21 89 5977 2011-03-27 00:16:52 99 3477 2011-03-27 00:17:30 jak zliczyć ile razy jest (np "game_id" 5977) i po zliczeniu wyświetlić malejąco Do wyświetlenia wyniku użyłem kody: $date = date('Y-m-d', time() - 60*60*24); $ocenagg = db::query("SELECT * FROM stats WHERE DATE(date)='$date'"); Dziękuję za wszystkie odpowiedzi. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
jeśli nie potrzebowałeś tych danych wcześniej obrabiać w php to lepiej to policzyć i posortować w bazie danych - jesli jednak potrzebowałeś coś robić z tymi danymi to te dane gdy przelatywałeś w pętli przepisz dodatkowo np. do tablicy po kluczu game_id i o ile w tablicy znajduje się taki klucz z wartością początkową 1 to następnymi razami dajesz ++$aTab[$iKey]... czyli w deseń:
$aTab = array(); forech...{//czy tam inna pętla po wynikach z bazy if(!isset($aTab[$iKey_game_id])){$aTab[$iKey_game_id]=1;}else{++$aTab[$iKey_game_id];} // i inne operacje na danych z tablicy } jednak jesli wystarczy gotowy wynik z bazy to zapytanie w stylu: "SELECT *, count(*) AS ile FROM stats WHERE DATE(date)='$date' GROUP BY game_id ORDER BY ile DESC" -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 21:56 |