Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie do bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
koala
Załóżmy, że mam tabelę o nazwie 'users' i ma ona np. 10 pól. Czasami potrzebne mi są wszystkie dane a czasami tylko zawartość np. 4 pól. Chciałbym sobie trochę ułatwić życie i zamiast co kawałek kodu "malować" jakieś przydługawe zapytanie do bazy, stworzyć metodę w klasie do której mógłbym się odwoływać podsyłając jej tylko np. nick użytkownika czyli $this->select($nick) i tu pojawia się pytanie o czas wykonywania zapytania.
Wiadomo, że jeśli metodzie podrzucę tylko nick użytkownika to zapytanie będzie musiało wyglądać tak :
  1. SELECT *
  2. FROM `users`
  3. ...

czyli odczyta wszystkie pola a czasami nie wszystkie dane są mi potrzebne i w tym momencie wiadomo zamiast "gwiazdki" wisuję nazwy tych potrzebnych pól.
Pytanie : czy bazie zajmie więcej czasu odczytanie wszystkich 10 pól niż 4 wybranych a jeśli tak to czy jest to jakaś znacząca różnica ? Załóżmy że w tym samym czasie np. 100 czy więcej użytkowników będzie coś "potrzebowało" od bazy, będzie to już jakiś znaczący czas ?
nrm
tak, jest to roznica. w praktycznie kazdej ksiazce jaka mialem w rekach o mysql byla mowa o tym aby w miare mozliwosci NIE uzywac *.
koala
Dzięki.
Będę musiał w takim razie albo pisać całe zapytania albo trochę rozbudować tą metodę i podsyłać jej więcej danych.
tiraeth
Najlepiej zrobić tak:

  1. <?php
  2. class costam
  3. {
  4.  // ...
  5.  function ladujDane()
  6.  {
  7. $arg_list = func_get_args();
  8. $user_id = $arg_list[0];
  9. $arg_list = array_shift($arg_list);
  10.  
  11. $sql = 'SELECT userid';
  12. foreach($arg_list as $pole)
  13. {
  14.  $sql.= ', '.$pole;
  15. }
  16. $sql = ' FROM users WHERE userid = ' . $user_id .' LIMIT 1';
  17.  
  18. // Wykonujesz zapytanie z $sql i pobierasz dane
  19.  }
  20.  // ...
  21. }
  22.  
  23. // Możesz teraz np.:
  24. $user = new costam;
  25. $dane = $user->ladujDane('identyfikator_uzytkownik', 'pole1', 'pole2', 'pole3' ...);
  26. // Ile chcesz tych pol, tylko jako pierwszy argument musi byc identyfikator uzytko
    wnika
  27. ?>
koala
@tiraeth - wielkie dzięki !

W mojej TABLE 'users' nie mam wprawdzie pola 'id' więc będę musiał przykładzik z lekka zmienić ale to już nie problem. Jeszcze raz dziękuję.

---------------------------------------------------------------------------------------

Domyślam się, że tiraeth pisał przykład or ręki i dlatego wkradł się mały błąd a, że na pewno to rozwiązanie się komuś oprócz mnie przyda więc poprawiona wersja :
  1. <?php
  2. class costam
  3. {
  4.  // ...
  5.  function ladujDane()
  6.  {
  7. $arg_list = func_get_args();
  8. $user_id = array_shift($arg_list);
  9.  
  10. $sql = 'SELECT userid';
  11. foreach($arg_list as $pole)
  12. {
  13.  $sql.= ', '.$pole;
  14. }
  15. $sql .= ' FROM users WHERE userid = ' . $user_id .' LIMIT 1';
  16.  
  17. // Wykonujesz zapytanie z $sql i pobierasz dane
  18.  }
  19.  // ...
  20. }
  21.  
  22. // Możesz teraz np.:
  23. $user = new costam;
  24. $dane = $user->ladujDane('identyfikator_uzytkownik', 'pole1', 'pole2', 'pole3');
  25. // Ile chcesz tych pol, tylko jako pierwszy argument musi byc identyfikator uzytko
    wnika
  26. ?>
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.