Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Połączenie rekordów z 2 kolumn
Przemo75
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 2
Dołączył: 9.03.2004
Skąd: POLSKA

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


Witam,
Potrzebuję przerobić wyszukiwarkę, żeby zamiast jednego z select'ów (model) wyświetlał połączone rekordy z 2 kolumn (model + nadwozie).

Mam takie coś:

  1. include('dbconfig.php');
  2. $action = $_REQUEST['action'];
  3.  
  4. if ($action=='showAll')
  5. {
  6. $id = "0";
  7. } else {
  8. $id=$_POST['id'];
  9. }
  10.  
  11. switch(true)
  12. {
  13. case ($action == 'showAll' OR ($action == 'marka' and $id == '')):
  14. default:
  15. $stmt=$DB_con->prepare('SELECT marka FROM haki2 GROUP BY marka');
  16. $stmt->execute();
  17. break;
  18.  
  19. case ($action == 'marka' OR ($action == 'model' and $id == '')):
  20. $marka = $_POST['marka'];
  21. $stmt=$DB_con->prepare('SELECT model FROM haki2 WHERE marka=:marka GROUP BY model ORDER BY model');
  22. $stmt->execute(array(':marka'=>$marka));
  23. break;
  24.  
  25. case ($action == 'model' OR ($action == 'rocznik' and $id == '')):
  26. $marka = $_POST['marka'];
  27. $model=str_replace("\\", "", $_POST['model']);
  28. $stmt=$DB_con->prepare('SELECT rok_produkcji FROM haki2 WHERE model=:model GROUP BY rok_produkcji ORDER BY rok_produkcji');
  29. $stmt->execute(array(':model'=>$model));
  30. break;
  31.  
  32. case ($action == 'rocznik'):
  33. $marka = $_POST['marka'];
  34. $model=str_replace("\\", "", $_POST['model']);
  35. $rocznik=str_replace("\\", "", $_POST['rocznik']);
  36. $stmt=$DB_con->prepare('SELECT * FROM haki2 WHERE model=:model AND rok_produkcji=:rocznik ORDER BY rok_produkcji');
  37. $stmt->execute(array(':model'=>$model, ':rocznik'=>$rocznik));
  38. break;
  39. }



Po zmianie zapytania na:

  1. $stmt=$DB_con->prepare('SELECT model, nadwozie, CONCAT(model, " - ", nadwozie) AS model_new FROM haki2 WHERE marka=:marka GROUP BY model_new ORDER BY model_new');


wyrzuca dwa błędy odnoszące się do linii:
  1. $stmt->execute(array(':marka'=>$marka));

1. Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined':
2. ( ! ) PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in E:\wamp\www\Tomek\2018-04-02\pokaz_haki.php on line 33

Ten post edytował Przemo75 3.04.2018, 14:35:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





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




Kiedy sie nauczysz ze :model w zapytaniu ma byc tez :model w bindowaniu? A nie zadne :model_new w bindowaniu a w zapytaniu :model... Naprawde nie widzisz analogii?

Poza tym nie
WHERE CONCAT_WS(model, " - ", nadwozie) AS model_new=:model
a:
WHERE CONCAT_WS(model, " - ", nadwozie)=:model
Go to the top of the page
+Quote Post
Przemo75
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 2
Dołączył: 9.03.2004
Skąd: POLSKA

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


Cytat(nospor @ 3.04.2018, 15:36:12 ) *
Kiedy sie nauczysz ze :model w zapytaniu ma byc tez :model w bindowaniu? A nie zadne :model_new w bindowaniu a w zapytaniu :model... Naprawde nie widzisz analogii?

Poza tym nie
WHERE CONCAT_WS(model, " - ", nadwozie) AS model_new=:model
a:
WHERE CONCAT_WS(model, " - ", nadwozie)=:model

Widziałem analogię ale trochę pokręciłem. :-(
Bardzo dziękuję za pomoc. Teraz wszystko działa jak należy. :-)



Niestety działa dobrze tylko lokalnie. :-(
Na serwerze niestety jest już problem. W nazwach gdzie występuje ' np. (marka) KIA (model) CEE'D SW - Kombi już nie wyświetla rocznika w select'ie.
W bazie marka zapisana jest jako CEE\'D SW. Wydawało by się, że nie będzie problemów dzięki
  1. $model = str_replace("\\", "", $_POST['model']);



Jak się okazało, lokalnie nie wszystko działa.
Niestety w jednej z łączonych kolumn (nadwozie) występują m.in. znaki "+" i ":", np. FORD KUGA - SUV, 2+4WD (dotyczy wiązki: wiązka rozbudowana)

Można to jakoś "obejść"?

Ten post edytował Przemo75 4.04.2018, 07:24:27
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 10:17