![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 2.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam mam 3 tablele o zawartości:
CODE -- -- Struktura tabeli dla `db_dane` -- CREATE TABLE `db_dane` ( `id` smallint(6) NOT NULL auto_increment, `user_id` smallint(6) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM ; -- -------------------------------------------------------- -- -- Struktura tabeli dla `db_ratings` -- CREATE TABLE `db_ratings` ( `rating_id` smallint(5) unsigned NOT NULL auto_increment, `rating_item_id` smallint(5) unsigned NOT NULL default '0', `rating_type` char(1) NOT NULL default '', `rating_user` smallint(5) unsigned NOT NULL default '0', `rating_vote` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`rating_id`) ) TYPE=MyISAM ; -- -------------------------------------------------------- -- -- Struktura tabeli dla `db_users` -- CREATE TABLE `db_users` ( `user_id` smallint(5) unsigned NOT NULL auto_increment, PRIMARY KEY (`user_id`) ) TYPE=MyISAM ; Prosiłbym bardzo aby mi ktoś stworzył funkcję wyświetlającą średnią ocenę na podstawie zmiennej $user_id wziętej z user_id w db_users. Średnia wziętą ze wszystkich pól rating_vote (tzn. SELECT SUM(rating_vote) / COUNT(rating_item_id) ) gdzie rating_item_id zawiera id z db_dane w którym user_id to ta nasza zmienna podawana przy funkcji. Od kilku godzin już się nad tym głowię i niestety brak postępów. Dopiero raczkuję w temacie mysql więc będę za wszelką pomoć wdzięczny |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 732 Pomógł: 80 Dołączył: 25.05.2005 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj trochę manuala na początek tutaj, robisz dwa zapytania i potem wykonujesz dzielenie normalnie w PHP, ale z tego co wiem da się to zrobić w jednym zapytaniu, więc można pobrać tylko rezultat zapytania. Jeśli masz phpMyAdmin poćwicz zapytania SQL na nim, zobacz czy wynik jest prawidłowy, zmień trochę przykład w manualu, do którego link dostałeś i to wszystko (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ten post edytował sniezny_wilk 2.01.2008, 16:14:24 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 2.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
A chociaż jakby ktoś szkielet tego wszystkigo podał bo z samym menualem sobie niestety nie dam rady... (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
A zaglądałeś chociaż do manuala?
Jesli tak, to nie powinno Ci to sprawić żadnego problemu. Kod SELECT AVG(user_id) FROM db_dane;
Ten post edytował Hazel 2.01.2008, 20:27:05 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 2.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Coś mi się zdaje, że kompletnie nie zrozumiałeś co chcę otrzymać...
Ale i tak dzięki za zainteresowanie. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Chyba faktycznie nie rozumiem, bo czytam Twojego posta ósmy raz i nie jarzę chyba. Wywnioskowałem tylko tyle, że raczej na pewno (?) masz więcej tabel niż ta jedna, której zrzut dałeś.
edit: aaaa, tam jest pasek przewijania (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) sorry (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Ten post edytował Hazel 2.01.2008, 20:39:22 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 508 Pomógł: 75 Dołączył: 2.11.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT AVG(rat.rating_vote) FROM db_ratings rat, db_dane dane GROUP BY dane.user_id WHERE dane.user_id=$id_usera AND dane.user_id=rat.rating_item_id Czy o takie cos chodzi? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT AVG(db_r.rating_vote) FROM db_dane as db_d, db_ratings as db_r WHERE db_d.user_id=db_r.rating_item_id AND db_d.user_id='$id_usera' Ale nie testowałem, przyznam otwarcie. edit: no, mi też wyszło dokładnie to samo ale nie wiem czy to w porządku jest... trochę się trzeba spocić (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Ten post edytował Hazel 2.01.2008, 20:51:40 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 2.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Hazel niestety zwraca Null...
franki01 wyskakuje błąd przy WHERE/END Bardzo Wam obu dziękuję. Postaram się opisać po kolei co powinno robić zapytanie może to ułatwi... 1. Na początek mamy podaną "user_id" z db_users przyjmijmy, że jest to zmienna $user terez na jej podstawie: 2.Pobiera wszystkie "id" z db_dane w których user_id = $user 3. Pobiera średnią wszystkich "rating_vote" z db_ratings w których "rating_item_id" będzie równy wszystkim "id" pobranym w punkcie drugim. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 508 Pomógł: 75 Dołączył: 2.11.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT AVG(rat.rating_vote) FROM db_ratings rat, db_dane dane GROUP BY dane.user_id WHERE dane.user_id='$id_usera' AND dane.user_id=rat.rating_item_id Jak przy tym bedzie blad to napisz jaki dokladnie blad zwraca mysql i jak dokladnie wyglada zapytanie do bazy danych (echo $zapytanie). Bo moze cos w zapytaniu jest zle zrobione. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 2.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
CODE SELECT AVG( rat.rating_vote ) FROM ep_ratings rat, ep_poezja poe GROUP BY poezja.user_id WHERE poezja.user_id = '187' AND poezja.user_id = rat.rating_item_id LIMIT 0 , 30 MySQL zwrócił komunikat: Dokumentacja #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE poe . user_id = '187' AND poe . user_id = rat . rating_item_id LIMIT 0, ' at line 1 db_dane zastąpione ep_poezja struktura taka sama db_ratings zastąpione ep_ratings user_id przyjął wartość 187 bo mam ustawione że jeden rating_vote będzie miał wartość 3, a drugi 4 czyli średnia powinna dla tego użytkownika być 3,5 To test w PHPmyadmin |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 508 Pomógł: 75 Dołączył: 2.11.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Zamiast:
Kod LIMIT 0 , 30 Daj: Kod LIMIT 0,30 Czy kolo przecinka usun spacje. Powinno dzialac. EDIT: Jeszcze: Kod ep_poezja poe zastap: Kod ep_poezja poezja
Ten post edytował franki01 2.01.2008, 23:25:04 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 2.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ten limit się tam automatycznie pojawia w kodzie bo ja żadnego limitu nie chcę.
Zapytanie jakie podaję: SELECT AVG(rat.rating_vote) FROM ep_ratings rat, ep_poezja poezja GROUP BY poezja.user_id WHERE poezja.user_id = '187' AND poezja.user_id = rat.rating_item_id; CODE zapytanie SQL: Dokumentacja SELECT AVG( rat.rating_vote ) FROM ep_ratings rat, ep_poezja poezja GROUP BY poezja.user_id WHERE poezja.user_id = '187' AND poezja.user_id = rat.rating_item_id LIMIT 0 , 30 MySQL zwrócił komunikat: Dokumentacja #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE poezja . user_id = '187' AND poezja . user_id = rat . rating_item_id LIM' at line 1 W ogóle dla mnie bez sensu... Sprawdzałem na 100 sposobów.... |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 508 Pomógł: 75 Dołączył: 2.11.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Jaki ja jestem nieuwazny... Brak slow i wstyd (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Klauzula WHERE musi byc zawsze przed GROUP BY... Kod SELECT AVG( rat.rating_vote ) FROM ep_ratings rat, ep_poezja poezja WHERE poezja.user_id = '$user_id' GROUP BY poezja.user_id AND poezja.user_id = rat.rating_item_id Wielkie sory za problemy, ale czasami sa takie dni (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() ![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 2.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
To ja przepraszam za problemy, a dziękuję za pomoc.
Jeszcze jednak potrzeba chwilę nad tym kodem podłubać... Na razie mam: Kod SELECT AVG(rat.rating_vote) FROM ep_ratings rat , ep_poezja poezja WHERE poezja.user_id = '187' GROUP BY poezja.user_id AND poezja.user_id = rat.rating_item_id Ale nie otrzymuję wyniku 3,5 tylko 4.1366 3+4/2 = 3.5 Albo coś spartoliłem albo nie znam już kompletnie przyczyny. Proszę jeszcze o umieszczenie w kodzie warunku Kod rating_type='W' z ep_ratings bo nie wiem w którym to teraz miejscu dodać (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) Bardzo Was przepraszam za moje nieuctwo, wierzę jednak że może dzięki temu tematowi się czegoś nauczę i dziękuję za cierpliwość (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif) Ten post edytował Shiro 3.01.2008, 04:16:21 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 508 Pomógł: 75 Dołączył: 2.11.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT AVG(DISTINCT rat.rating_vote)
FROM ep_ratings rat , ep_poezja poezja WHERE poezja.user_id = '187' AND rat.rating_type='W' GROUP BY poezja.user_id AND poezja.user_id = rat.rating_item_id |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 2.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko działa prawidłowo! Bardzo Dziękuję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:20 |