Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MSSQL][MySQL][SQL]Wyszukiwarka na kilku tabelach
eminiasty
post
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----


  1. $query1 = "
  2. SELECT *
  3. FROM ".$prefix."A,".$prefix."B
  4. WHERE ".$prefix."A.A_name LIKE '%".$name."%'
  5. OR ".$prefix."B.B_title LIKE '%".$name."%'
  6. ";


Mam wyszukiwarke wpisuje haslo $name. I teraz chce szukac w dwoch tabelach jednoczesnie(tabele nie sa powiazane). Jednakże zapytanie w tej formie nie spełnia oczekiwań. Proowalem tez na zasadzie SELECT or SELECT lecz to tez nie dziala, czy sie tak da? i w jakis sposob, prosil bym o przyklad.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Puszy
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Nie jest możliwe żeby jedna kolumna miała dwie różne nazwy (nic mi bynajmniej o tym nie wiadomo i wydaje się to dość nielogiczne) dlatego też masz rozróżnienie tabel w kolumnie table_id. Nie wiem co konkretnie chcesz z tym dalej zrobić ale możesz przecież wynik zwrócić do klasy. Uzywając np PDO wynik mapujesz do klasy a tam ustawiasz gettera przykład niżej, dzięki zmapowaniu do klasy łatwiej się pracuje możesz wrzucić tam jakie tylko zechcesz funkcji a dane pobierasz tylko raz.

res to alias dla całego wyniku, dzięki temu możesz później dodać warunki i grupowanie z całego wyniku union czy też dorzucić join


  1. <?php
  2.  
  3. $pdo = new PDO(); // inicjalizacja połączenia, host, user, pass itd.
  4.  
  5. $query = "
  6. SELECT
  7. *
  8. FROM (
  9. SELECT
  10. name,
  11. id,
  12. 'A' AS table_id
  13. FROM ".$prefix."A
  14. WHERE A_name LIKE :nameA
  15.  
  16. UNION ALL
  17.  
  18. SELECT
  19. name,
  20. id,
  21. 'B' AS table_id
  22. FROM ".$prefix."B
  23. WHERE B_title LIKE :nameB
  24. ) res
  25. ";
  26.  
  27. $stmt = $pdo->prepare($query);
  28. $paramName = '%'.$name.'%';
  29. $stmt->bindParam(':nameA', $paramName, PDO::PARAM_STR);
  30. $stmt->bindParam(':nameB', $paramName, PDO::PARAM_STR);
  31.  
  32. $stmt->execute();
  33.  
  34. $result = $stmt->fetchAll(PDO::FETCH_CLASS, 'Wynik');
  35.  
  36. class Wynik{
  37. public $name;
  38. public $id;
  39. public $table_id;
  40.  
  41. public function getName(){
  42. return $this->name;
  43. }
  44.  
  45. public function test(){
  46. return $this->table_id . '_name';
  47. }
  48.  
  49. public function getMyArray(){
  50. return [
  51. $this->table_id . '_name' => $this->name,
  52. 'id' => $this->id,
  53. ];
  54. }
  55. }
  56.  
  57. $myResult = [];
  58.  
  59. foreach ($result as $v){
  60. $myResult[] = $v->getMyArray();
  61. }
  62.  


$result będzie zawierało tablicę obiektów Wynik, jeżeli potrzebujesz bardziej szczegółowej pomocy musisz rozwinąć problem.
Z kolei $myResult będzie zawierało tablicę której potrzebujesz, z odpowiednimi kluczami.

Ten post edytował Puszy 30.09.2016, 15:40:45
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
3 Użytkowników czyta ten temat (3 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 12:49