Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie złożone JOIN ON
Panicz74
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 28.08.2015

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


Witam,

Mam taki problem. Musze przerobić swoje zapytania złożone na formę z INNER JOIN (poniekąd przy większej liczbie rekordów serwer się zawiesi). Zapytanie takie, które zrobiłem zwraca wszystkie wyniki:

  1. "SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o
  2. JOIN users u ON u.id_usera = o.id_usera
  3. JOIN branza b ON b.id_branzy = o.id_branzy
  4. JOIN umowa i ON i.id_umowy = o.id_umowy
  5. JOIN lokalizacja l ON l.id_lok = o.id_lok"


A pojawiają się schody bo muszę teraz wybierać poszczególne elementy i średnio mi to wychodzi. Takie zapytanie również zwraca mi wszystkie wyniki zamiast tylko tych podanych w GET:

  1. "SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o, branza AS b
  2. JOIN users u ON u.id_usera = o.id_usera
  3. JOIN branza b ON b.id_branzy = o.id_branzy
  4. JOIN umowa i ON i.id_umowy = o.id_umowy
  5. JOIN lokalizacja l ON l.id_lok = o.id_lok
  6. WHERE b.nazwa_branzy = '{$_GET['nazwa']}'"


Czy ktoś może mi podpowiedzieć jak przerobić to zapytanie aby wyciągnąć tylko te elementy podane w GET??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Po co dodales to:
, branza AS b
?
Przeciez masz juz to w JOIN...
Go to the top of the page
+Quote Post
Panicz74
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 28.08.2015

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


Nic to nie zmieniło niestety...
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Niemozliwe. Pokaz DOKLADNIE caly kod, pokaz co zawiera $_GET, pokaz jak wyglada wygenerowane zapytanie
Go to the top of the page
+Quote Post
Panicz74
post
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 28.08.2015

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


Dziwne bo zapytanie w PhpMyAdmin ruszylo bez problemu. Skrypt niestety nie działa:

Część skryptu odpowiedzialna za to zapytanie:
  1. if($_GET['nazwa'] =="elektromechanik" || $_GET['nazwa'] =="murarz" || $_GET['nazwa'] =="slusarz" || $_GET['nazwa'] =="kowal" && $_GET['umowa'] == "---" && $_GET['lokalizacja'] == "---")
  2. {
  3. try
  4. {
  5. $pdo = new PDO($pol, $user, $pass);
  6. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7. if(isset($_GET['nazwa']))
  8. {
  9. $stmt = $pdo->query("SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o
  10. JOIN users u ON u.id_usera = o.id_usera
  11. JOIN branza b ON b.id_branzy = o.id_branzy
  12. JOIN umowa i ON i.id_umowy = o.id_umowy
  13. JOIN lokalizacja l ON l.id_lok = o.id_lok
  14. WHERE b.nazwa_branzy = '{$_GET['nazwa']}'");
  15. echo '<ul>';
  16. foreach($stmt as $row)
  17. {
  18. echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].'</li>';
  19. }
  20. $stmt->closeCursor();
  21. echo '</ul>';
  22. //print_r($_GET);
  23. }
  24. }
  25. catch(PDOException $e)
  26. {
  27. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  28. }
  29. }


Cały index.php:
  1. <?php
  2.  
  3. require_once 'connect.php';
  4. // SELECT pusty - pokaż wszystko
  5. if(empty($_GET['nazwa']) || $_GET['nazwa'] == "---" || $_GET['umowa'] == "---" || $_GET['lokalizacja'] == "---")
  6. {
  7. try
  8. {
  9. $pdo = new PDO($pol, $user, $pass);
  10. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  11.  
  12. $stmt = $pdo->query("SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o
  13. JOIN users u ON u.id_usera = o.id_usera
  14. JOIN branza b ON b.id_branzy = o.id_branzy
  15. JOIN umowa i ON i.id_umowy = o.id_umowy
  16. JOIN lokalizacja l ON l.id_lok = o.id_lok");
  17. echo '<ul>';
  18. foreach($stmt as $row)
  19. {
  20. echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].'</li>';
  21. }
  22. $stmt->closeCursor();
  23. echo '</ul>';
  24. //print_r($_GET);
  25.  
  26. }
  27. catch(PDOException $e)
  28. {
  29. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  30. }
  31. }
  32.  
  33. else if(!empty($_GET['nazwa']))
  34. {
  35. // SELECT nazwa - pokaż wszystko po nazwie
  36. if($_GET['nazwa'] =="elektromechanik" || $_GET['nazwa'] =="murarz" || $_GET['nazwa'] =="slusarz" || $_GET['nazwa'] =="kowal" && $_GET['umowa'] == "---" && $_GET['lokalizacja'] == "---")
  37. {
  38. try
  39. {
  40. $pdo = new PDO($pol, $user, $pass);
  41. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  42. if(isset($_GET['nazwa']))
  43. {
  44. $stmt = $pdo->query("SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o
  45. JOIN users u ON u.id_usera = o.id_usera
  46. JOIN branza b ON b.id_branzy = o.id_branzy
  47. JOIN umowa i ON i.id_umowy = o.id_umowy
  48. JOIN lokalizacja l ON l.id_lok = o.id_lok
  49. WHERE b.nazwa_branzy = '{$_GET['nazwa']}'");
  50. echo '<ul>';
  51. foreach($stmt as $row)
  52. {
  53. echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].'</li>';
  54. }
  55. $stmt->closeCursor();
  56. echo '</ul>';
  57. //print_r($_GET);
  58. }
  59. }
  60. catch(PDOException $e)
  61. {
  62. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  63. }
  64. }
  65. // SELECT nazwa, umowa - pokaż po nazwa && umowa
  66. else if(!empty($_GET['nazwa'] =="elektromechanik" || $_GET['nazwa'] =="murarz" || $_GET['nazwa'] =="slusarz" || $_GET['nazwa'] =="kowal" &&
  67. $_GET['umowa'] =="umowa o prace" || $_GET['umowa'] =="umowa zlecenie" || $_GET['umowa'] =="umowa o dzielo" || $_GET['umowa'] =="umowa na czas okreslony") && $_GET['lokalizacja'] == "---")
  68. {
  69. try
  70. {
  71. $pdo = new PDO($pol, $user, $pass);
  72. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  73. if(isset($_GET['nazwa']))
  74. {
  75. $stmt = $pdo->query("SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM branza AS b, ogloszenia AS o, users AS u, umowa AS i, lokalizacja AS l
  76. WHERE b.nazwa_branzy = '{$_GET['nazwa']}' AND i.rodzaj_umowy = '{$_GET['umowa']}'
  77. AND u.id_usera = o.id_usera AND b.id_branzy = o.id_branzy AND i.id_umowy = o.id_umowy AND l.id_lok = o.id_lok");
  78. echo '<ul>';
  79. foreach($stmt as $row)
  80. {
  81. echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].'</li>';
  82. }
  83. $stmt->closeCursor();
  84. echo '</ul>';
  85. //print_r($_GET);
  86. }
  87. }
  88. catch(PDOException $e)
  89. {
  90. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  91. }
  92. }
  93. // SELECT nazwa, umowa, lokalizacja - pokaż po nazwa && umowa && lokalizacja
  94. else if(!empty($_GET['nazwa'] =="elektromechanik" || $_GET['nazwa'] =="murarz" || $_GET['nazwa'] =="slusarz" || $_GET['nazwa'] =="kowal" &&
  95. $_GET['umowa'] =="umowa o prace" || $_GET['umowa'] =="umowa zlecenie" || $_GET['umowa'] =="umowa o dzielo" || $_GET['umowa'] =="umowa na czas okreslony") && $_GET['lokalizacja'] == "Opole" ||
  96. $_GET['lokalizacja'] == "Krapkowice" || $_GET['lokalizacja'] == "Nysa" || $_GET['lokalizacja'] == "Olesno")
  97. {
  98. try
  99. {
  100. $pdo = new PDO($pol, $user, $pass);
  101. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  102. if(isset($_GET['nazwa']))
  103. {
  104. $stmt = $pdo->query("SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM branza AS b, ogloszenia AS o, users AS u, umowa AS i, lokalizacja AS l
  105. WHERE b.nazwa_branzy = '{$_GET['nazwa']}' AND i.rodzaj_umowy = '{$_GET['umowa']}' AND l.lokalizacja = '{$_GET['lokalizacja']}'
  106. AND u.id_usera = o.id_usera AND b.id_branzy = o.id_branzy AND i.id_umowy = o.id_umowy AND l.id_lok = o.id_lok");
  107. echo '<ul>';
  108. foreach($stmt as $row)
  109. {
  110. echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].'</li>';
  111. }
  112. $stmt->closeCursor();
  113. echo '</ul>';
  114. //print_r($_GET);
  115. }
  116. }
  117. catch(PDOException $e)
  118. {
  119. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  120. }
  121. }
  122. //else {echo "SQL Injection Try Detected!!!";}
  123.  
  124. //else {echo "SQL Injection Try Detected!!!";}
  125. }
  126.  
  127. ?>


Formularz:
  1. <form action="index.php" method="get">
  2. <select name="nazwa" value="nazwa">
  3. <option><?php if(isset($_GET['nazwa'])) {echo ($_GET['nazwa']);} else {echo "---";} ?></option>
  4. <option>---</option>
  5. <option>elektromechanik</option>
  6. <option>murarz</option>
  7. <option>slusarz</option>
  8. <option>kowal</option>
  9. </select>
  10. <select name="umowa" value="umowa">
  11. <option><?php if(isset($_GET['umowa'])) {echo ($_GET['umowa']);} else {echo "---";} ?></option>
  12. <option>---</option>
  13. <option>umowa o prace</option>
  14. <option>umowa zlecenie</option>
  15. <option>umowa o dzielo</option>
  16. <option>umowa na czas okreslony</option>
  17. </select>
  18. <select name="lokalizacja" value="lokalizacja">
  19. <option><?php if(isset($_GET['lokalizacja'])) {echo ($_GET['lokalizacja']);} else {echo "---";} ?></option>
  20. <option>---</option>
  21. <option>Opole</option>
  22. <option>Krapkowice</option>
  23. <option>Nysa</option>
  24. <option>Olesno</option>
  25. </select>
  26. <input type="submit" name="submit" value="Zastosuj filtry">
  27. <a href="index.php">Odśwież</a>
  28. </form>
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




A skad wiesz ze dziala w PMA? Wpisales recznie zapytanie do PMA, czy moze wkleiles do PMA to co generuje ci php? Bo jak recznie wpisales, to pewnie masz inaczej niz to co generuje ci php. Sprawdz, pisalem ci juz o tym
Go to the top of the page
+Quote Post
Panicz74
post
Post #7





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 28.08.2015

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


W PhpMyAdmin zapytanie takie przeszło:

  1. SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o JOIN users u ON u.id_usera = o.id_usera JOIN branza b ON b.id_branzy = o.id_branzy JOIN umowa i ON i.id_umowy = o.id_umowy JOIN lokalizacja l ON l.id_lok = o.id_lok WHERE b.nazwa_branzy = "elektromechanik"


W skrypcie wygląda tak i pokazuje wszystko:
  1. $stmt = $pdo->query("SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o
  2. JOIN users u ON u.id_usera = o.id_usera
  3. JOIN branza b ON b.id_branzy = o.id_branzy
  4. JOIN umowa i ON i.id_umowy = o.id_umowy
  5. JOIN lokalizacja l ON l.id_lok = o.id_lok
  6. WHERE b.nazwa_branzy = '{$_GET['nazwa']}'");


Formularz:
  1. <select name="nazwa" value="nazwa">
  2. <option><?php if(isset($_GET['nazwa'])) {echo ($_GET['nazwa']);} else {echo "---";} ?></option>
  3. <option>---</option>
  4. <option>elektromechanik</option>
  5. <option>murarz</option>
  6. <option>slusarz</option>
  7. <option>kowal</option>
  8. </select>


Przed próbami wprowadzenia JOIN ON działało bez zarzutu...
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Ile jeszcze raz mam powtarzac... sprawdz jak wyglada WYGENEROWANE zapytanie....

echo "SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o
JOIN users u ON u.id_usera = o.id_usera
JOIN branza b ON b.id_branzy = o.id_branzy
JOIN umowa i ON i.id_umowy = o.id_umowy
JOIN lokalizacja l ON l.id_lok = o.id_lok
WHERE b.nazwa_branzy = '{$_GET['nazwa']}'";
I to zapytanie wstaw do PMA
Go to the top of the page
+Quote Post
Panicz74
post
Post #9





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 28.08.2015

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


Za pomocą skryptu:
  1. <form action="check.php" method="get">
  2. <select name="nazwa" value="nazwa">
  3. <option><?php if(isset($_GET['nazwa'])) {echo ($_GET['nazwa']);} else {echo "---";} ?></option>
  4. <option>---</option>
  5. <option>elektromechanik</option>
  6. <option>murarz</option>
  7. <option>slusarz</option>
  8. <option>kowal</option>
  9. </select>
  10.  
  11. <input type="submit" name="submit" value="Zastosuj filtry">
  12. <a href="index.php">Odśwież</a>
  13. </form>
  14.  
  15. <?php
  16.  
  17. require_once 'connect.php';
  18.  
  19. echo "SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o
  20. JOIN users u ON u.id_usera = o.id_usera
  21. JOIN branza b ON b.id_branzy = o.id_branzy
  22. JOIN umowa i ON i.id_umowy = o.id_umowy
  23. JOIN lokalizacja l ON l.id_lok = o.id_lok
  24. WHERE b.nazwa_branzy = '{$_GET['nazwa']}'";
  25.  
  26. ?>


otrzymałem:
  1. SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o JOIN users u ON u.id_usera = o.id_usera JOIN branza b ON b.id_branzy = o.id_branzy JOIN umowa i ON i.id_umowy = o.id_umowy JOIN lokalizacja l ON l.id_lok = o.id_lok WHERE b.nazwa_branzy = 'elektromechanik'


i po wklejeniu do PhpMyAdmin ruszyło:)
Tymczasem w skrypcie właściwym sprawa wygląda tak:
  1. if($_GET['nazwa'] =="elektromechanik" || $_GET['nazwa'] =="murarz" || $_GET['nazwa'] =="slusarz" || $_GET['nazwa'] =="kowal" && $_GET['umowa'] == "---" && $_GET['lokalizacja'] == "---")
  2. {
  3. try
  4. {
  5. $pdo = new PDO($pol, $user, $pass);
  6. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7. if(isset($_GET['nazwa']))
  8. {
  9. $stmt = $pdo->query("SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja FROM ogloszenia AS o
  10. JOIN users u ON u.id_usera = o.id_usera
  11. JOIN branza b ON b.id_branzy = o.id_branzy
  12. JOIN umowa i ON i.id_umowy = o.id_umowy
  13. JOIN lokalizacja l ON l.id_lok = o.id_lok
  14. WHERE b.nazwa_branzy = '{$_GET['nazwa']}'");
  15.  
  16. echo '<ul>';
  17. foreach($stmt as $row)
  18. {
  19. echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].'</li>';
  20. }
  21. $stmt->closeCursor();
  22. echo '</ul>';
  23.  
  24. //print_r($_GET);
  25. }
  26. }
  27. catch(PDOException $e)
  28. {
  29. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  30. }
  31. }


I nadal wyświetla wszystkie rekordy... Może w instrukcji warunkowej coś jest nie tak... Ale tak patrzę i raczej wszystko z nią ok.

Już mam. Pierwszego if zmieniłem z:

  1. if(empty($_GET['nazwa']) || $_GET['nazwa'] == "---" || $_GET['umowa'] == "---" || $_GET['lokalizacja'] == "---")


na:

  1. if(empty($_GET['nazwa']) || $_GET['nazwa'] == "---" && $_GET['umowa'] == "---" && $_GET['lokalizacja'] == "---")


I działa. Dzięki za czas i pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 5.10.2025 - 00:45