Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie zapytania SQL na podstawie wklejonego textu?
Forum PHP.pl > Forum > PHP
mskiba
Witam, muszę wygenerować zapytania SQL z wklejonego textu.

Text ma format taki:

Marka: ALFA ROMEO
Model: 156 (932)
Silnik: 1.6 16V T.SPARK (932A4)
1.8 16V T.SPARK (932A31__)
2.8 16V T.SPARK (932A3)

Marka: FIAT
Model: BRAVA (182)
Silnik: 1.2 16V 80
1.2 16V 80
4.4 (182.BG)

Wynik po wygenerowaniu powinien wyglądać tak:

  1. INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', 'id_parts', id_auto, 'id_categories', '9' FROM auta WHERE marka='ALFA ROMEO' AND model='156' AND kod_modelu='932' AND silnik='1.6 16V T.SPARK' AND numer_silnika='932A4';
  2. INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', 'id_parts', id_auto, 'id_categories', '9' FROM auta WHERE marka='ALFA ROMEO' AND model='156' AND kod_modelu='932' AND silnik='1.8 16V T.SPARK' AND numer_silnika='932A31__';
  3. INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', 'id_parts', id_auto, 'id_categories', '9' FROM auta WHERE marka='ALFA ROMEO' AND model='BRAVA' AND kod_modelu='932' AND silnik='2.8 16V T.SPARK' AND numer_silnika='932A3';
  4.  
  5. INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', 'id_parts', id_auto, 'id_categories', '9' FROM auta WHERE marka='FIAT' AND model='156' AND kod_modelu='182' AND silnik='1.2 16V 80' AND numer_silnika='';
  6. INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', 'id_parts', id_auto, 'id_categories', '9' FROM auta WHERE marka='FIAT' AND model='156' AND kod_modelu='182' AND silnik='1.2 16V 80' AND numer_silnika='';
  7. INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', 'id_parts', id_auto, 'id_categories', '9' FROM auta WHERE marka='FIAT' AND model='156' AND kod_modelu='182' AND silnik='4.4' AND numer_silnika='182.BG';


Próbowałem zrobić to za pomocą str_replace i zamieniać poszczególne części textu, ale przy nawiasach już się zrobił problem.

Proszę o jakieś pomysły jakich funkcji tutaj użyć wink.gif
nospor
Tutaj najlepiej się nada explode() i pokolei bedziesz wydzielał poszczegolne bloki.
Od biedy mozesz uzyc wyrazen regularnych, ale pewnie ich nie znasz.
mskiba
Dokładnie w ten sposób sobie wczoraj poradziłem wink.gif

  1. $co=array("Marka: ");
  2. $naco=array("%");
  3. $marka=explode("%",str_replace($co,$naco,$_GET['text']));
  4.  
  5. foreach($marka as $marka)
  6. {
  7. $co=array("Model: ","Typ: ");
  8. $naco=array("%","%");
  9. $marka_model_silnik=explode("%",str_replace($co,$naco,$marka));
  10.  
  11. $co=array(" (",")");
  12. $naco=array("%","");
  13. $model=explode("%",str_replace($co,$naco,$marka_model_silnik[1]));
  14.  
  15. $co=array("0.","1.","2.","3.","4.","5.","6.","7.","8.","9.");
  16. $naco=array("%0.","%1.","%2.","%3.","%4.","%5.","%6.","%7.","%8.","%9.");
  17. $silniki=explode("%",str_replace($co,$naco,$marka_model_silnik[2]));
  18.  
  19. foreach($silniki as $silniki)
  20. {
  21. $co=array(" (",")");
  22. $naco=array("%","");
  23. $silnik=explode("%",str_replace($co,$naco,$silniki));
  24.  
  25. if($_GET['action'] == show)
  26. {
  27. $sql=mysql_query("SELECT * FROM auta WHERE marka='".$marka_model_silnik[0]."' AND model='".$model[0]."' AND kod_modelu='".$model[1]."' AND silnik='".$silnik[0]."' AND numer_silnika='".$silnik[1]."'");
  28. $count=mysql_num_rows($sql);
  29.  
  30. if($count == 1)
  31. {
  32. echo "<font color=\"green\">INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', '".$_GET['id_parts']."', id_auto, '".$_GET['id_categories']."', '".$_SESSION['id']."' FROM auta WHERE marka='".$marka_model_silnik[0]."' AND model='".$model[0]."' AND kod_modelu='".$model[1]."' AND silnik='".$silnik[0]."' AND numer_silnika='".$silnik[1]."';</font><br />";
  33. }
  34. elseif($count > 1)
  35. {
  36. echo "<font color=\"blue\">INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', '".$_GET['id_parts']."', id_auto, '".$_GET['id_categories']."', '".$_SESSION['id']."' FROM auta WHERE marka='".$marka_model_silnik[0]."' AND model='".$model[0]."' AND kod_modelu='".$model[1]."' AND silnik='".$silnik[0]."' AND numer_silnika='".$silnik[1]."';</font><br />";
  37. }
  38. else{
  39. echo "<font color=\"red\">INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', '".$_GET['id_parts']."', id_auto, '".$_GET['id_categories']."', '".$_SESSION['id']."' FROM auta WHERE marka='".$marka_model_silnik[0]."' AND model='".$model[0]."' AND kod_modelu='".$model[1]."' AND silnik='".$silnik[0]."' AND numer_silnika='".$silnik[1]."';</font><br />";
  40. }
  41. }
  42. elseif($_GET['action'] == execute)
  43. {
  44. $sql=mysql_query("SELECT * FROM auta WHERE marka='".$marka_model_silnik[0]."' AND model='".$model[0]."' AND kod_modelu='".$model[1]."' AND silnik='".$silnik[0]."' AND numer_silnika='".$silnik[1]."'");
  45. $count=mysql_num_rows($sql);
  46.  
  47. if($count == 1)
  48. {
  49. $sql=mysql_query("INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', '".$_GET['id_parts']."', id_auto, '".$_GET['id_categories']."', '".$_SESSION['id']."' FROM auta WHERE marka='".$marka_model_silnik[0]."' AND model='".$model[0]."' AND kod_modelu='".$model[1]."' AND silnik='".$silnik[0]."' AND numer_silnika='".$silnik[1]."'");
  50. }
  51. elseif($count > 1)
  52. {
  53. $zapytanie="INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', '".$_GET['id_parts']."', id_auto, '".$_GET['id_categories']."', '".$_SESSION['id']."' FROM auta WHERE marka='".$marka_model_silnik[0]."' AND model='".$model[0]."' AND kod_modelu='".$model[1]."' AND silnik='".$silnik[0]."' AND numer_silnika='".$silnik[1]."';";
  54.  
  55. $sql=mysql_query("INSERT INTO parts_to_auto_klon (id, query, id_session) VALUES
  56. ('', '".$zapytanie."', '".$_SESSION['id']."')");
  57. }
  58. else{
  59. $zapytanie="INSERT INTO parts_to_auto (id_parts_to_auto, id_parts, id_auto, id_categories, id_session) SELECT '', '".$_GET['id_parts']."', id_auto, '".$_GET['id_categories']."', '".$_SESSION['id']."' FROM auta WHERE marka='".$marka_model_silnik[0]."' AND model='".$model[0]."' AND kod_modelu='".$model[1]."' AND silnik='".$silnik[0]."' AND numer_silnika='".$silnik[1]."';";
  60.  
  61. $sql=mysql_query("INSERT INTO parts_to_auto_error (id, query, id_session) VALUES
  62. ('', '".$zapytanie."', '".$_SESSION['id']."')");
  63. }
  64. }
  65.  
  66. }
  67. }


Dzięki i pozdrawiam

Mam jeszcze pytanko, jak z ponizszego textu wyciagnać zaznaczona wartosc? (120HP)

147 (937) 1.6 16V T.SPARK (937AXB1A) (2001-01 » 2010-03), mot. AR 32104, 88kW, 120HP, 1598ccm
tzm
  1. $s = '147 (937) 1.6 16V T.SPARK (937AXB1A) (2001-01 ť 2010-03), mot. AR 32104, 88kW, 120HP, 1598ccm';
  2. $ss = explode(',', $s);
  3. echo $ss[3];


Jeśli zadbasz o standaryzację odbieranych danych to to wystarczy.
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.