![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzien dobry wszystkim. Potrzebuje pomocy w wyszukaniu bledu mojego zapytania. Na czym problem polega:
Majac dwie tabele: a)
![]()
... chcialbym wykonac zapytanie przy logowaniu na stronie php, ktore sprawdzi do jakiej tabeli przynalezy dany uzytkownik. Oczywiscie uzytkownik X nie moze nalezec do jednej i drugiej tabeli.
Moje zapytanie:
Powyzsze zapytanie dziala poprawnie. Ale potrzebuje to zliczyc przy pomocy funkcji count(*), wiec:
Nie dziala juz. Czy macie jakies propozycje jak zastosowac counta aby zapytanie dzialalo poprawnie? Ten post edytował agentmullder 15.03.2010, 13:16:02 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
A nie zauważyłeś jednej prostej rzeczy? Skoro obie te tabele są identyczne strukturalnie, to prościej stworzyć jedną z kolumn typ, gdzie 0 to uczeń a 1 to nauczyciel. W ten sposób user z tymi samymi danymi może być z mostu odrzucony do zapisu jeśli położysz index unique na username. Eliminuje Ci to potrzebę sprawdzania różnych tabel, stosowanie UNION i innych kombinacji, bo masz wszystko w jednej. Poza tym zauważ, że user i nauczyciel o tym samym id jak zostaną rozpoznani przez system? Osobne panele logowania, z których jeden sprawdza tylko uczniów, a inny tylko nauczycieli lub dodatkowy checkbox/radio "Jestem nauczycielem/Jestem uczniem"?
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 2 Dołączył: 13.05.2003 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
skoro posiadasz 2 takie same tabele nie lepiej zrobić jedna, a dodać do niej pole "user_typ"
i przypisać odpowiednio 1 - uczeń, 2 - nauczyciel?
powyższe zapytanie zwróci 1 bądź 2... i po kłopocie. a odnośnie "count" co ty chcesz zliczyć? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem was. Tylko moze zle podalem tabele, troche je uproscilem. W tabeli nauczyciele bedzie zalozmy o 5 kolumn wiecej np:
- pensja - stanowisko - staz - stawka za nadgodziny - ... Zas w tabeli uczniowie oprocz tego co wczesniej podalem teoretycznie nie bedzie nic wiecej. Zatem jesli wrzucimy oba typy uzytkownikow do jednej tabeli, bedziemy mieli z 12 kolumn, z czego dla uzytkownikow (okolo 500 uczniow) typu uczen wykorzystamy tylko z 3 kolumny a dla nauczycieli (okolo 10 nauczycieli) typy nauczyciel az blisko 9 kolumn. A taki sposob wydaje mi sie malo ekonomiczny z punktu widzenia wykorzystania tabel. Countem chce sprawdzic czy podany login i haslo znajduje sie w ktorejs tabeli. Ten post edytował agentmullder 15.03.2010, 13:05:12 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 2 Dołączył: 13.05.2003 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
no to dołóż teraz tabele z tymi dodatkowymi danymi,
- pensja - stanowisko - staz - stawka za nadgodziny i oczywiście pole "user_id" które stworzy relacje z polem "user_id" z tabeli "user" |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 2 Dołączył: 13.05.2003 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
ja bym to zrobił tak:
jeśli jest użytkownik w bazie to pokaże jego ID a później to się bawić do woli... Ten post edytował piotrdd2 15.03.2010, 14:43:47 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
ja bym to zrobił tak:
jeśli jest użytkownik w bazie to pokaże jego ID a później to się bawić do woli... Tyle, ze wedlug Twojej propozycji, Nauczyciel juz sie nie zaloguje. Bo tworzysz tabele o nazwie user (zamiast uczniowie, ale to szczegol) i wyszukujesz uzytkownikow w tabeli uczniowie, a co z Nauczycielami? Wiem wiem nikt nie lubi nauczycieli, ale trzeba umozliwic im logowanie. Problem nadal nie rozwiazany. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 4 Dołączył: 13.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
nie wiem po co ten count, ale żeby działał count to przed średnikiem trzeba jakoś nazwać tabele dostarczana w nawiasach wg: SELECT COUNT(*) FROM (SELECT ....) A;
Każdy ma uwagi do struktury Twojej DB, to ja napomknę, że ponieważ tabele reprezentują różne instancje ich id nazwy też powinno się różnić: teacher_id, pupil_id; jak będziesz rozbudowywał db to później będziesz np przypisywał uczniów do nauczycieli albo coś w tym stylu albo jakieś bardziej skomplikowane relacje to będziesz szukał niepotrzebnie skomplikowanych rozwiązań i warunków. Pozdrawiam |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
nie wiem po co ten count, ale żeby działał count to przed średnikiem trzeba jakoś nazwać tabele dostarczana w nawiasach wg: SELECT COUNT(*) FROM (SELECT ....) A; Każdy ma uwagi do struktury Twojej DB, to ja napomknę, że ponieważ tabele reprezentują różne instancje ich id nazwy też powinno się różnić: teacher_id, pupil_id; jak będziesz rozbudowywał db to później będziesz np przypisywał uczniów do nauczycieli albo coś w tym stylu albo jakieś bardziej skomplikowane relacje to będziesz szukał niepotrzebnie skomplikowanych rozwiązań i warunków. Pozdrawiam Czyli rowniez uwazasz zeby wszystkich usersow uczniow i nauczycieli wrzucic do jednej tabeli? Mimo, ze np uczniowie beda uzywali tylko 3 kolumn a nauczyciele 9? Jesli jeszcze ktos przyzna, zeby wrzucic wszystkich uzytkownikow do 1 tabeli to sie dam na spokoj z kombinowaniem i tak zrobie. Ten post edytował agentmullder 15.03.2010, 15:52:30 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 2 Dołączył: 13.05.2003 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
Tyle, ze wedlug Twojej propozycji, Nauczyciel juz sie nie zaloguje. Bo tworzysz tabele o nazwie user (zamiast uczniowie, ale to szczegol) i wyszukujesz uzytkownikow w tabeli uczniowie, a co z Nauczycielami? Wiem wiem nikt nie lubi nauczycieli, ale trzeba umozliwic im logowanie. Problem nadal nie rozwiazany. zaloguje, loginy i hasła uczniow i nauczycieli są w tej samej tabeli!, a jeśli dany user jest nauczycielem to dodatkowo pobiera dane z tabeli 'nauczyciele' tam jest relacja u.user_id=n.user_id Dodatkowo stwórz sobie pole 'user_typ' tak jak pisałem wcześniej dla ułatwienia. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 4 Dołączył: 13.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czyli rowniez uwazasz zeby wszystkich usersow uczniow i nauczycieli wrzucic do jednej tabeli? Mimo, ze np uczniowie beda uzywali tylko 3 kolumn a nauczyciele 9? Jesli jeszcze ktos przyzna, zeby wrzucic wszystkich uzytkownikow do 1 tabeli to sie dam na spokoj z kombinowaniem i tak zrobie. nie, aż tak głęboko się nie wgryzam co chcesz zrobić. Po prostu powierzchownie patrząc widzę dwie table, z prawdopodobnie dwoma indexami niezależnymi o tej samej nazwie user_id. Jeśli już to pewnie zrobiłbym 3 tabele: teacher, pupil, user. user mialby kolumny: 'czy teacher/pupil', login, pass, i inne wspólne charakterystyczne dla dostępu via internet. Nie wiem nie wgryzam się, sam musisz ocenić jak będziesz później to rozwijał. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mam w obu tabelach user_rangnge i na tej podstawie uzytkownicy maja dostaep do okreslonych podstron za pomoca sesji. Dla jednej tabeli skrypt dziala poprawnie, ale dla dwoch tabel z select count(*) from (select ....) A; nie dziala :/ Gdyby ten count dzialal, to mialbym problem z glowy. Juz z tym borykam sie od miesiaca i nadal siedze w .. nie powiem gdzie ;/
Ten post edytował agentmullder 15.03.2010, 16:37:28 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 4 Dołączył: 13.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam w obu tabelach user_rangnge i na tej podstawie uzytkownicy maja dostaep do okreslonych podstron za pomoca sesji. Dla jednej tabeli skrypt dziala poprawnie, ale dla dwoch tabel z select count(*) from (select ....) A; nie dziala :/ Gdyby ten count dzialal, to mialbym problem z glowy. Juz z tym borykam sie od miesiaca i nadal siedze w .. nie powiem gdzie ;/ to podaj zapytanie, ktore nie dziala |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
No wiec w php to wyglada tak:
$log to zmienna ktora przechowuje wpisany login z formularza; $pass to zmienna ktora przechowuje haslo wpisane z formularza. Ten post edytował agentmullder 15.03.2010, 16:58:40 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 4 Dołączył: 13.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
No wiec w php to wyglada tak:
$log to zmienna ktora przechowuje wpisany login z formularza; $pass to zmienna ktora przechowuje haslo wpisane z formularza. jak poprawisz nazwy kolumn to bedzie działało, name na user_name, etc sprawdzaj sobie zapytania np. phpmyadmin - czesto o proste błedy a komunikat błędu szybko Cie naprowadzi gdzie błąd |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Tak robilem jak mowisz w phpmyadminie. Tak tez mialem identyczne nazwy kolumn. Jaki efekt? A no taki, ze mimo ze wpisujac login i haslo w miejsa $log i $pass phpmyadmin wypluwal mi, ze sa poprawne dane mimo, ze w bazie nie bylo takiego loginu i hasla. Pokaż rekordy 0 - 0 (1 wszystkich, Wykonanie zapytania trwało 0.0004 sekund(y)) Zawsze to samo mi dawalo, niezaleznie czy login i haslo byly w bazie czy nie. |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 4 Dołączył: 13.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tak robilem jak mowisz w phpmyadminie. Tak tez mialem identyczne nazwy kolumn. Jaki efekt? A no taki, ze mimo ze wpisujac login i haslo w miejsa $log i $pass phpmyadmin wypluwal mi, ze sa poprawne dane mimo, ze w bazie nie bylo takiego loginu i hasla. Pokaż rekordy 0 - 0 (1 wszystkich, Wykonanie zapytania trwało 0.0004 sekund(y)) Zawsze to samo mi dawalo, niezaleznie czy login i haslo byly w bazie czy nie. e tam, coś kręcisz. Zapytanie zwraca poprawnie 0 dla braku usera lub 1 gdy jest. Masz pewnie błąd gdzieś w php, może źle interpretujesz wynik zapytania? |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 1.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
@aio masz ode mnie mega +! Dziekuje za pomoc. Problem rozwiazany
![]() Ten post edytował agentmullder 15.03.2010, 18:34:21 |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 20.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 06:45 |