Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dzielone zapytania w mysql_query
Forum PHP.pl > Forum > Bazy danych > MySQL
toolmaniak
Witam! Mam taki duży problem. Otóż wyskrobałem kawałek kodu SQL w oparciu o tabele tymczasową, którego zadaniem jest wyświetlenie kilku pól z tabeli klienci i daty ostatniego wpisu z tabeli notatki. Tam gdzie nie ma żadnej notatki wstawiamy NULL. Sprawa jest taka, że wszystko działa pięknie w kleincie mysql-a tylko w żaden sposób nie wiem jak to zagnieździć w klauzuli mysql_query w php. blink.gif

Oto kod SQL:

  1. DROP TABLE IF EXISTS tmp;
  2. CREATE TEMPORARY TABLE tmp
  3. (SELECT firma,ulica,miejscowosc,kod_pocztowy,max(n.DATA) AS DATA,k.id AS id FROM klienci k,notatki n WHERE miejscowosc LIKE '%kraków%' AND k.id=n.id_klienci GROUP BY id);
  4.  
  5. INSERT INTO tmp ( SELECT firma,ulica,miejscowosc,kod_pocztowy,NULL AS DATA,k.id AS id FROM klienci k WHERE miejscowosc LIKE '%kraków%');
  6. SELECT DISTINCT firma, ulica,miejscowosc,kod_pocztowy,DATA,id FROM tmp GROUP BY id ORDER BY firma DESC;
  7. DROP TABLE IF EXISTS tmp;


do mysql_query próbuje wpakować taki kod ze zmiennymi sesyjnymi i POST:

  1. <?php
  2. $tmp_query="DROP TABLE IF EXISTS tmp;
  3. CREATE TEMPORARY TABLE tmp
  4. (SELECT firma,ulica,miejscowosc,kod_pocztowy,MAX(n.data) AS data,k.id AS id from ".$_SESSION['table']." k,notatki n WHERE ".$_POST['temat']." LIKE '%".$searchrec_b."%' AND k.id=n.id_klienci GROUP BY id);
  5.  
  6. INSERT INTO tmp (SELECT firma,ulica,miejscowosc,kod_pocztowy,NULL AS data,k.id AS id FROM ".$_SESSION['table']." k WHERE ".$_POST['temat']." LIKE '%".$searchrec_b."%');
  7. SELECT DISTINCT firma, ulica,miejscowosc,kod_pocztowy,data,id FROM tmp GROUP BY 
    id ORDER BY "
    .$_POST['sort_target']." ".$_POST['sort_val'].";
  8. DROP TABLE IF EXISTS tmp";
  9.  
  10. @mysql_query($tmp_query);
  11. ?>


Pomocy!!!! Czy ktoś wie jak to zamieścić w php? guitar.gif
nospor
w php kazde zapytanie nalezy wykonac oddzielnie, anie tak jak ty probujesz - wszystko razem.

  1. <?php
  2. mysql_query('pierwsze zapytanie');
  3. mysql_query('drugie zapytanie');
  4. //....
  5. ?>
toolmaniak
Problem z tym, że tak próbowałem i nic...
nospor
Moze pokaz nam jak probowales, a my ci powiemy gdzie popelniles ewentualne bledy winksmiley.jpg

ps: i nie zapomnij po kazdym zapytaniu dac mysql_error, bo moze ci pluje bledami. cos takiego:
  1. <?php
  2. mysql_query('zapytanie') or die(mysql_error());
  3. ?>
i tak dla kazdego zapytania
no i pozbadz sie tych malp @
toolmaniak
  1. <?php
  2. if (isset($_POST['temat'])) {
  3. $_SESSION['temat']=$_POST['temat'];
  4. $_SESSION['sort_target']=$_POST['sort_target'];
  5. $_SESSION['sort_val']=$_POST['sort_val'];
  6. if ($_SESSION['sort_target']==NULL && $_SESSION['sort_val']==NULL) { $_SESSION['sort_target']=="firma"; $_SESSION['sort_val']="ASC";}
  7. if ($_POST['temat'] == "kontakty") {
  8. // Szukanie w kontaktach
  9. $searchrec_b = strtr($_POST['searchrec'], " ", "%");
  10. $search_query="SELECT firma,ulica,miejscowosc,kod_pocztowy,tel_sluzbowy,o.id as id FROM ".$_SESSION['table']." k, ".$_POST['temat']." o where o.imie_nazwisko like '%".$searchrec_b."%' and k.id=o.id or o.imie_nazwisko1 like '%".$searchrec_b."%' and k.id=o.id or o.imie_nazwisko2 like '%".$searchrec_b."%' and k.id=o.id or o.imie_nazwisko3 like '%".$searchrec_b."%' and k.id=o.id"; 
  11. } else
  12. if ($_POST['temat'] == "notatki1") {
  13. // Szukanie w notatkach
  14. $searchrec_b = strtr($_POST['searchrec'], " ", "%");
  15. $search_query="SELECT DISTINCT firma,ulica,miejscowosc,kod_pocztowy,MAX(n.data) AS data,n.id_klienci AS id from ".$_SESSION['table']." k, ".$_POST['temat']." n WHERE n.notatka like '%".$searchrec_b."%' AND k.id=n.id_klienci GROUP BY id;";
  16. }
  17. else {
  18. // Szukanie w pozostałych polach
  19. $searchrec_b = strtr($_POST['searchrec'], " ", "%");
  20. @mysql_query($search_query);
  21. @mysql_query("DROP TABLE IF EXISTS tmp");
  22.  
  23. @mysql_query("CREATE TEMPORARY TABLE tmp
  24. (select firma,ulica,miejscowosc,kod_pocztowy,max(n.data) as data,k.id as id from klienci4 k,notatki1 n where miejscowosc like '%kraków%' and k.id=n.id_klienci group by id)");
  25. @mysql_query("INSERT INTO tmp ( select firma,ulica,miejscowosc,kod_pocztowy,null as data,k.id as id from klienci4 k where miejscowosc like '%kraków%')");
  26. $search_query="select distinct firma, ulica,miejscowosc,kod_pocztowy,data,id from tmp grou
    p by id order by firma desc"
    ;
  27.  
  28.  
  29.  
  30.  
  31. }
  32. $rekordy=mysql_query($search_query);
  33.  
  34. $id_rekordy=mysql_num_rows($rekordy);
  35. $ilosc=mysql_num_fields($rekordy);
  36. $id_frame = fopen($_SESSION['db']."_".$_SESSION['table'].".html", "w");
  37. // Tworzenie Panelu wynikowego
  38. ?>



Tak to mniej więcej wygląda - po komentarzu szukanie w pozostałyh polach
nospor
no ale czy ja nie wyraźnie piszę?

Cytat
ps: i nie zapomnij po kazdym zapytaniu dac mysql_error, bo moze ci pluje bledami. cos takiego:
Kod php
<?php
mysql_query('zapytanie') or die(mysql_error());
?>

i tak dla kazdego zapytania
no i pozbadz sie tych malp @
toolmaniak
DROP command denied to user 'lukasz'@'serwerownia.lan' for table 'tmp'

Chyba jestem w domu... Nie nadałem uprawnień do usuwania tabel dla żadnego uzytkownika. Trzeba zaprząc GRANT-a i zobacze co będzie... tylko mam jedno pytanie - nie chce nadawac uprawnień globalnych dlatego zdefiniowałem tylko uprawnienia do każdej z tabel osobno, czy do tempa mam tez okreslić uprawnienia i jak?
  1. REVOKE ALL PRIVILEGES ON `database` . * FROM 'lukasz'@'%'; GRANT USAGE ON `database` . * TO 'lukasz'@ '%';
  2. GRANT SELECT , INSERT , UPDATE , REFERENCES ON `database`.`klienci` TO 'lukasz'@'%';


itd.

i czy tak samo ma być z tmp tzn.
  1. GRANT SELECT , INSERT , UPDATE , REFERENCES ON `database`.`tmp` TO 'lukasz'@'%';
toolmaniak
  1. GRANT SELECT ,
  2. INSERT ,
  3.  
  4. UPDATE ,
  5. DELETE ,
  6. DROP ,
  7. CREATE TEMPORARY TABLES ,
  8. LOCK TABLES ON `database` . * TO 'lukasz'@ '%';



Zrobiłem tak, działa. Dzięki za pomoc...

Pozdrawiam guitar.gif
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.