![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam dość spory problem którego nie potrafię sam rozwiązać :\ Posiadam 2 następujący tabele, 1 - logowanie, 2 - typy ![]() Najważniejsze z tych tabel będą dane uzytkownik, kurs, stawka oraz siadl. Te 4 na pewno będą potrzebne aby rozwiązać mój problem. Chce utworzyć prostą tabelkę na stronie w ktorej bedzie od najwiekszego na najmniejszego zysku jaki przyniósł uzytkownik. (tabelka po srodku) ![]() Myślałem o takim czymś
Lecz to nie zdaje egzaminu. Co powinienem zrobić? Pozdrawiam! Ten post edytował inwob 2.05.2010, 20:37:29 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Wszystkie pola text? A później są narzekania, że MySQL jest mało wydajny... Z tej struktury nie wynika nawet jaka jest zależność między tymi tabelami.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Nadal nie wiemy jakie pole z tabeli typy jest kluczem obcym. Zakładam, że `uzytkownik`
Kod SELECT l.uzytkownik, t.zysk FROM logowanie AS l INNER JOIN (SELECT uzytkownik, MAX(stawka * kurs) AS zysk FROM typy GROUP BY uztkownik) AS t ON t.uzytkownik = l.id ORDER BY t.zysk DESC LIMIT 10 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nadal nie wiemy jakie pole z tabeli typy jest kluczem obcym. Zakładam, że `uzytkownik` Kod SELECT l.uzytkownik, t.zysk FROM logowanie AS l INNER JOIN (SELECT uzytkownik, MAX(stawka * kurs) AS zysk FROM typy GROUP BY uztkownik) AS t ON t.uzytkownik = l.id ORDER BY t.zysk DESC LIMIT 10 Po twoim zapytaniu uzyskałem takie coś: uzytkownik zysk admin 4200 admin 1480 admin 390 admin 237 admin 130 admin 32 A ja chce coś takiego: User1 2000 User3 1000 User2 200 User5 -100 User4 -2000 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Nie pomagam dalej, zanim nie pokażesz struktury tabel która nadaje się do pracy. Nadal nie powiedziałeś, jakie pole w tabeli typy jest kluczem obcym do tabeli logowanie. Zgadywałem, mogłem nie trafić, stąd takie efekty.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie pomagam dalej, zanim nie pokażesz struktury tabel która nadaje się do pracy. Nadal nie powiedziałeś, jakie pole w tabeli typy jest kluczem obcym do tabeli logowanie. Zgadywałem, mogłem nie trafić, stąd takie efekty. Może podam ci przykłady z tych tabel. Nie wiem o co ci chodzi z tym kluczem obcym bo na tym się jeszcze nie znam. ![]() |
|
|
![]()
Post
#8
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
to zrób takie same screen shoty tylko kliknij w zakładkę struktura.
-------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Z której wynika tylko tyle, że do niczego się nie nadaje.
Z tych screenów wynika, że zrobiłeś klucz obcy na kolumnie typy.uzytkownik która wskazuje na kolumnę logowanie.uzytkownik, co jest raczej marnym rozwiązaniem, ale może działać w taki sposób: Kod SELECT
l.uzytkownik, t.zysk FROM logowanie AS l INNER JOIN (SELECT uzytkownik, MAX(stawka * kurs) AS zysk FROM typy GROUP BY uztkownik) AS t ON t.uzytkownik = l.uzytkownik ORDER BY t.zysk DESC LIMIT 10 Ten post edytował Mchl 3.05.2010, 12:52:11 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Z której wynika tylko tyle, że do niczego się nie nadaje. Z tych screenów wynika, że zrobiłeś klucz obcy na kolumnie typy.uzytkownik która wskazuje na kolumnę logowanie.uzytkownik, co jest raczej marnym rozwiązaniem, ale może działać w taki sposób: Kod SELECT l.uzytkownik, t.zysk FROM logowanie AS l INNER JOIN (SELECT uzytkownik, MAX(stawka * kurs) AS zysk FROM typy GROUP BY uztkownik) AS t ON t.uzytkownik = l.uzytkownik ORDER BY t.zysk DESC LIMIT 10 Niepotrzebnie korzystasz z kolumny zysk ponieważ ona jest tylko kolumną testową. Załóż tak że `zysk` nie istnieje. I jeżeli siadł > 1 to należy odjąć stawkę a jeżeli siadł = 1 należy zrobić (stawka * kurs) - stakwa a jeśli siadl = 0, ominąć |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Nigdzie nie korzystam z kolumny zysk. Odsyłam do kursu SQL.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Ja mówiłem poważnie.
http://www.w3schools.com/SQL/sql_alias.asp |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ja mówiłem poważnie. http://www.w3schools.com/SQL/sql_alias.asp no dobra masz racje. beda musial to jakos po swojemu zrobic bo nikt nie pomoze :\ |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Jak nie pomożesz nam, to jak mamy pomóc Tobie? Od pierwszego postu mówię, żebyś najpierw doprowadził do porządku strukturę tabeli. Ale wolisz budować zamki na piaski. Powodzenia.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie znam się super na tym więc może powiesz jak?
Teraz mam tak
Ten post edytował inwob 3.05.2010, 17:26:07 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Ustaw właściwe typy danych dla kolumn. Tam gdzie liczba, niech będzie liczba, gdzie data - data, gdzie tekst nie dłuższy niż kilka tysięcy znaków - varchar.
Jako pole łączące obie tabele użyj ID użytkownika a nie jego nazwę. |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
wspólne kolumny to użytkownika, w tabeli typy, id jest numerem typu a nie numerem użytkownika
![]() |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Ale właśnie o to chodzi, żebyś w tabeli `typy` zamiast pola uzytkownik VARCHAR(50) miał uzytkownik_id INT. Zamiast wiązać przez napis, wiążesz przez ID, co jest pewniejsze i szybsze.
kurs: DECIMAL(5,2) albo DECIMAL(6,3), zależy jak dokładnie chcesz email: INT? ![]() IP: przechowujemy jako INT i korzystamy z funkcji INET_ATON() i INET_NTOA() online, siadl: jak rozumiem wartość typu tak/nie, czyli typ TINYINT co najwyżej haslo: CHAR(32), collation ASCII - hash zawsze ma stałą długość kontakt,opis - czy na pewno aż text potrzebny? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 01:00 |