![]() |
![]() |
![]()
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? |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Kontakt i opis mają parę linijek.
Poprawiłem jak mówiłeś. Dodałem też kolumne `uzytkownik_id` po `uzytkownik` w `typy` i w `logowanie` |
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
W `logowanie` nie potrebujesz tej kolumny.
Spójrz. tabela `logowanie` id, uzytkownik, email... (inne dane) --------------------------- 1, admin, admin@typer.com 2, inwob, inwob@typer.com 3, mchl, mchl@irweasel.com tabela `typy` id, uzytkownik_id, typ, kurs ... -------------------------------- 1, 1, 1, 1.85 2, 1, X, 2.05 3, 2, 2, 1.90 4, 3, 1X, 1.55 Kolumna uzytkownik_id w tabeli `typy` mówi nam, do którego użytkownika należy dany typ. I tak, typy o id równym 1,2 należą do użytkownika 'admin, typ o id = 3 należy do użytkownika inwob, a typ z id = 4 należy do użytkownika 'mchl'. Mówimy, że kolumna typy.uzytkownik_id jest kluczem obcym, bo wskazuje na klucz główny w innej tabeli. Piszesz, że kontakt i opis mają po parę linijek. A ile mają znaków? To się liczy. TEXT to naprawdę spora armata, a w VARCHAR możesz zmieścić do 65000 znaków. |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 2.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
W `logowanie` nie potrebujesz tej kolumny. Spójrz. tabela `logowanie` id, uzytkownik, email... (inne dane) --------------------------- 1, admin, admin@typer.com 2, inwob, inwob@typer.com 3, mchl, mchl@irweasel.com tabela `typy` id, uzytkownik_id, typ, kurs ... -------------------------------- 1, 1, 1, 1.85 2, 1, X, 2.05 3, 2, 2, 1.90 4, 3, 1X, 1.55 Kolumna uzytkownik_id w tabeli `typy` mówi nam, do którego użytkownika należy dany typ. I tak, typy o id równym 1,2 należą do użytkownika 'admin, typ o id = 3 należy do użytkownika inwob, a typ z id = 4 należy do użytkownika 'mchl'. Mówimy, że kolumna typy.uzytkownik_id jest kluczem obcym, bo wskazuje na klucz główny w innej tabeli. Piszesz, że kontakt i opis mają po parę linijek. A ile mają znaków? To się liczy. TEXT to naprawdę spora armata, a w VARCHAR możesz zmieścić do 65000 znaków. nie usune uzytkownik z typy bo to duzo problemow mi narobi a przydaje sie w panelu admina zeby wyswietlac jaki uzytkownik dodal typ bez podrzeby odwolania do logowanie. To nie jest duza strona, max 250 uzytkownikow wiec wole zostawic text w opis i kontakt a wielkiej roznicy to chyba nie zrobi |
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Zrobisz co zechcesz. Jakby co to ostrzegałem
![]() Przynajmniej nie używaj tego pola jako klucza obcego. Zobacz że już w tych danych które wkleiłeś w jednej tabeli masz 'Typ-za-sms' a w drugiej 'typ-za-sms'. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:12 |