Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Zapytanie do dwóch tabel jednocześnie
Forum PHP.pl > Forum > Przedszkole
kubax33
  1.  
  2. $user = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE login = '$login' AND pass = '$pass'"));
  3. $user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE id='$id' LIMIT 1;"));


Mam taki dwa zapytania do bazy i chciałbym, aby w każdym zapytaniu pobierano informacje nie tylko z tabeli "uzytkownicy" ale kolejnej "uzytkownicy_2".
Czytałem o UNION ALL itp. ale chyba źle stosuję te warunki.
Michael2318
  1. SELECT u.login, u.pass, COUNT(u.id) AS one, COUNT(uu.id) AS two FROM `uzytkownicy` u LEFT JOIN `uzytkownicy_2` uu ON u.id = uu.id WHERE u.login = '$login' AND u.pass = '$pass';


zakładam, że kolumna, gdzie trzymasz id tych userów nazywa się id
kubax33
Mam dwa zapytania w klasie logowania

  1. self::$user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE login='$login' AND pass='$pass' LIMIT 1;"));
  2. $user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE id='$id' LIMIT 1;"));


oraz jedno po wysłaniu formularza logowania

  1. $user = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE login = '$login' AND pass = '$pass'"));


tak kolumna usherów to "id"

Wedle Twoich wskazówek podmieniłem po kolei:


  1. self::$user = mysql_fetch_array(mysql_query("SELECT u.login, u.pass, COUNT(u.id) AS one, COUNT(uu.id) AS two FROM `uzytkownicy` u LEFT JOIN `uzytkownicy_2` uu ON u.id = uu.id WHERE u.login = '$login' AND u.pass = '$pass LIMIT 1;"));
  2. $user = mysql_fetch_array(mysql_query("SELECT u.id COUNT(u.id) AS one, COUNT(uu.id) AS two FROM `uzytkownicy` u LEFT JOIN `uzytkownicy_2` uu ON u.id = uu.id WHERE u.id = '$id' LIMIT 1;"));


^^^
(tutaj w drugim przykładzie nie wiem czy dobrze.


  1. $user = mysql_fetch_array(mysql_query("SELECT u.login, u.pass, COUNT(u.id) AS one, COUNT(uu.id) AS two FROM `uzytkownicy` u LEFT JOIN `uzytkownicy_2` uu ON u.id = uu.id WHERE u.login = '$login' AND u.pass = '$pass"));


Jednak coś chyba robię nie tak. Nie wyskakuje error, ale nie loguje mnie do użytkownika z żadnej tabeli.
nospor
Napisz moze slownie, co chcesz zrobic i po co ci takie dzikie kombinacje... Na chwile obecną caly ten kod wyglada bez sensu.... Bo po grzyba bierzesz dane usera z danym loginem i haslem, zaraz potem bierzesz dane usera z danym ID, a potem jeszcze liczysz ile masz userow z danym loginem i haslem..... Toż to porąbana mieszanka
kubax33
Ponieważ mam system logowania usher-a i teraz dla przykładu logują się do niego trenerzy oraz piłkarze. Tylko trener może zakładać konta piłkarzom, a trenerowi może założyć tylko administrator. Dlatego chcę mieć podział na tych przykładowych trenerów i piłkarzy, aby wszystkie dane były w osobnych tabelach.
Min dlatego, że dla trenera potrzebuję np. 4 kolumny ID LOGIN PASS EMAIL a dla piłkarza LOGIN PASS EMAIL ILOSC_MECZY GRAŁ_MINUT itd. więc nie chciałbym zaśmiecać głównego użytkownika w tym przypadku trenera niepotrzebnymi kolumnami.

Opieram się na darmowym systemie rejestracji znalezionym w sieci:

LOGIN.php
  1. $login = htmlspecialchars(mysql_real_escape_string($_POST['login']));
  2. $pass = mysql_real_escape_string($_POST['pass']);
  3.  
  4. if ($_POST['send'] == 1) {
  5. // Sprawdź, czy wszystkie pola zostały uzupełnione
  6. if (!$login or empty($login)) {
  7. die ('<p class="error">Wypełnij pole z loginem!</p>');
  8. }
  9.  
  10. if (!$pass or empty($pass)) {
  11. die ('<p class="error">Wypełnij pole z hasłem!</p>');
  12. }
  13.  
  14. $pass = user::passSalter($pass); // Posól i zahashuj hasło
  15.  
  16. // Sprawdź, czy użytkownik o podanym loginie i haśle isnieje w bazie danych
  17. $userExists = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE login = '$login' AND pass = '$pass'"));
  18.  
  19. if ($userExists[0] == 0) {
  20. // Użytkownik nie istnieje w bazie
  21. echo '<p class="error">Użytkownik o podanym loginie i haśle nie istnieje.</p>';
  22. }
  23.  
  24. else {
  25. // Użytkownik istnieje
  26. $user = user::getData($login, $pass); // Pobierz dane użytknika do tablicy i zapisz ją do zmiennej $user
  27.  
  28. // Przypisz pobrane dane do sesji
  29. $_SESSION['login'] = $login;
  30. $_SESSION['pass'] = $pass;
  31.  
  32. echo '<p class="success">Zostałeś zalogowany. Możesz przejść na <a href="index.php">stronę główną</a></p>';
  33. }
  34. }
  35.  


CLASS.php

  1. class user {
  2.  
  3. public static $user = array();
  4.  
  5. /**
  6.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku.
  7.   * Indeksy tablicy odpowiadają nazwom pól w bazie danych (login, pass etc...)
  8.   * @param string $login
  9.   * @param string $pass
  10.   * @return array
  11.   */
  12. public function getData ($login, $pass) {
  13. if ($login == '') $login = $_SESSION['login'];
  14. if ($pass == '') $pass = $_SESSION['pass'];
  15.  
  16. self::$user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE login='$login' AND pass='$pass' LIMIT 1;"));
  17. return self::$user;
  18. }
  19.  
  20.  
  21. /**
  22.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku, tak jak powyższa metoda klasy,
  23.   * ale rozpoznaje użytkownika nie po podaniu loginu i hasła tylko po podaniu ID.
  24.   * Używana np. do wyświetlania strony profilu.
  25.   * @param int $id
  26.   * @return array
  27.   */
  28. public function getDataById ($id) {
  29. $user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='$id' LIMIT 1;"));
  30. return $user;
  31. }
  32.  
  33. /**
  34.   * Jeśli użytkownik jest zalogowany - zwraca true, w przeciwnym wypadku - false
  35.   * @return bool
  36.   */
  37. public function isLogged () {
  38. if (empty($_SESSION['login']) || empty($_SESSION['pass'])) {
  39. return false;
  40. }
  41.  
  42. else {
  43. return true;
  44. }
  45. }
  46.  
  47. /**
  48.   * "Soli" hasło przed jego zahashowaniem funkcją md5()
  49.   * @param string $pass
  50.   * @return string
  51.   */
  52. public function passSalter ($pass) {
  53. $pass = '$@@#$#@$'.$pass.'q2#$3$%##@';
  54. return md5($pass);
  55. }
  56.  
  57. }
nospor
System logowania znaleziony z sieci jest do bani... Najpierw sprawdza czy jest user, a jak jest to go pobiera.... Zbedne latanie do bazy. Pobierasz usera i jak nie ma to walisz komunikat, a jak jest to masz juz jego wszystkie dane i z glowy i nie trzeba po raz kolejny po to samo leciec do bazy.

Zas co do Twojego systemu to też jest do bani. Dane usera jak login i haslo, id itp mają byc w jednej tabeli i koniec kropka. Unikniesz bezsensownych kombinacji ktore chcesz robic teraz.

Dodatkowe dane, ktore są typowe dla danego typu usera to i owszem, trzymasz sobie w osobnej tabeli. Ale tylko te dodatkowe. I problem z glowy

ps: jakbys jednak nie zamierzal sie zastosowac do moich rad tylko nadal bys chcial brnac w slepą uliczkę jak teraz, to zapomnij o kodach Michael2318 gdyż nie zrozumiał totalnie idei i jego kody w Twoim przypadku nie zadziałają.
kubax33
Fakt masz racje. Dodam kolumne rangi użytkownika np. 1 trener 2 piłkarz i w razie gdybym chciał sobie wyselekcjonować osobno trenerów i piłkarzy to rozwiąże mój problem. Dane poszczególnych usher umieszczę w osobnej tabeli. Dzięki za pomoc
nospor
Co ty z tym USHER ciagle? Na poczatku sądzilem ze te H to literowka, ale ty ciągle usher i usher..... Co to niby ma byc ten usher?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.