Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przeszukiwanie całej bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
AxZx
witam

zabralem sie za pisanie wyszukiwarki dla administratora ktora bedzie wyszukiwala z calej bazy okreslonej frazy.

szukalem roznych sposobow, klas itd
ale nie znalazlem niczego co by mi odpowiadalo
klasy sa jakies dziwne, wole sam napisac jakies cos prostego


jak w zlym forum pisze to przepraszam, moze to bardziej do php by sie nadawalo


poki co wymyslilem ze bede pobieral dane z bazy jakie sa tabele, pozniej jakie sa nazwy kolumn i przeszukiwal tak jak zawsze:
  1. "SELECT *
  2. FROM ".$dane1[<span style='color:red'>'Name'] ." WHERE ".$dane2['Field']." LIKE '%".$string."%' "


Czy takie podejscie jest dobre czy inaczej jakos to rozwiazac?

  1. <?php
  2. $string = $_POST['string'];
  3. $zapytanie1 = $sql->query(&#092;"SHOW TABLE STATUS FROM \".$baza_baza);
  4. while($dane1 = $sql->fetch_assoc($zapytanie1)){
  5.  
  6. $zapytanie2 = $sql->query(&#092;"SHOW COLUMNS FROM \".$dane1['Name']);
  7. while($dane2 = $sql->fetch_assoc($zapytanie2)){
  8.  
  9. $zapytanie3 = $sql->query(&#092;"SELECT * FROM \".$dane1['Name'] .\" WHERE \".$dane2['Field'].\" LIKE '%\".$string.\"%' \");
  10. $dane3 = $sql->fetch_row($zapytanie3);
  11.  
  12. #wyswietlanie wyniku
  13.  
  14. }
  15. }
  16.  
  17. ?>


z gory dzieki za wszystkie sugestie porady pomysly:)
SongoQ
Jest kilka rozwiazan, ten 2 odpada bo przeciez nie bedziesz szukal w kazdym polu?
No chyba ze cos wykluczysz. To pierwsze by bylo lepsze tylko zboduj 1 zapytanie z wieloma warunkami. Najgorsza bedzie wydajnosc czegos takiego. Trzeba sie OR wystrzegac bo moga zamulic. No chyba ze jakos na partie zapytan podzielisz.
AxZx
czekam na nastepne rozwiazania smile.gif
nadal nic mi nie przychodzi do glowy jak to ladnie rozwiazac
tak jak np w phpmyadmin

pisze tam ile znalezionych i w jakiej tabeli
mario
Cytat(AxZx @ 2005-05-03 15:23:10)
pisze tam ile znalezionych i w jakiej tabeli

każdy by chciał wszystko mieć na tacy smile.gif najlepszą metodą poznania php'a jest samodzielna nauka. Więc skoro piszesz, że chcesz kod na takie rozwiązanie jakie jest w phpMyAdmin'ie to nic Ci nie pozostaje, jak podejrzeć strukturę kodu i do dzieła!!!
AxZx
e tam, nie o to chodzi

mowie ze chcialbym otrzymac cos podobnego

a poki co wyswietla mi kilka pozycji znalezionych z tej samej tabeli

czekam dalej na sugestie smile.gif
SongoQ
@AxZx Chyba w phpMyAdminie zrobili tak jak podales w 2 przykladzie. Ale tak z Ciekawosci potrzebne Ci jest znalezienie frazy we wszystkich polach w kazdej tabeli?
AxZx
jak 2 przykladzie?
ja nie podawalem 2 przykladow
tylko pisalem o jednym rozwiazaniu ktory wymyslilem


potrzebujesz przeszukac kilka kolumn w tabeli
bo czasem sie zdarzy ze np sa 2 kolumny, albo 3 co moze byc szukana fraza akurat

wiec trzeba przeszukac cala baze
SongoQ
No faktycznie 1 przyklad jakos te 2 zapytania mi zamieszaly. Zastanawiam sie co z takimi polami gdzie sa Id - klucze glowne i klucze obce, bo po tym chyba nie bedziesz szukal.
AxZx
hmmm
wlasciwie to wlasnie przydaloby sie wykluczyc niektore pola, zrobie tablice w ktorej zapisze pola ktore mozna by wykluczyc i chyba bedzie dobrze smile.gif


zrobilem cos takiego:
  1. <?php
  2.  
  3. function szukaj1(){
  4. global $sql, $baza_baza;
  5.  
  6. $string = $_POST['string'];
  7. $zapytanie1 = $sql->query(&#092;"SHOW TABLE STATUS FROM \".$baza_baza);
  8. while($dane1 = $sql->fetch_assoc($zapytanie1)){
  9. echo '<strong>'.$dane1['Name'].'</strong>: <br>';
  10. $zapytanie2 = $sql->query(&#092;"SHOW COLUMNS FROM \".$dane1['Name']);
  11. while($dane2 = $sql->fetch_assoc($zapytanie2)){
  12.  
  13.  
  14. if(!eregi(&#092;"(.*)_id\",$dane2['Field'])){
  15.  
  16.  
  17. $zapytanie3 = $sql->query(&#092;"SELECT * FROM \".$dane1['Name'] .\" WHERE \".$dane2['Field'].\" LIKE '%\".$string.\"%' \");
  18. while($dane3 = $sql->fetch_row($zapytanie3)){
  19. $ile_z = $sql->num_rows($zapytanie3);
  20.  
  21.  
  22. switch($dane1['Name']){
  23. case&#092;"artykuly\";
  24. $link = '?admin=art_edit1&amp;art_id='.$dane3[0];
  25. break;
  26. case&#092;"dzial\":
  27. $link = '?admin=dzial_edit2&amp;dzial_id='.$dane3[0];
  28. break;
  29. case&#092;"komentarze\":
  30. $link = '?admin=kom_view2&amp;kom_id='.$dane3[0];
  31. break;
  32. case&#092;"user\":
  33. $link ='?admin=user_edit2&amp;id='.$dane3[0];
  34. break;
  35. case&#092;"wydanie\":
  36. $link='?admin=numer_edit&amp;wyd_id='.$dane3[0];
  37. break;
  38. default:
  39. $link = '';
  40. break;
  41. }
  42.  
  43. if($ile_z>0){  
  44. echo '<strong>'.$dane1['Name'].'</strong>: ';
  45. echo '<a href=\"'.$link.'\">link</a><br>';
  46. }
  47. }
  48. }
  49. }
  50. }
  51.  
  52. }#koniec funkcji szukaj1
  53.  
  54. ?>



teraz mam pytanie
co zrobic zeby jak juz znajdzie cos w jednej kolumnie nie szukal juz w drugiej kolumnie?

bo teraz jak znajdzie w pierwszej kolumnie wypisze linka, i jak znajdzie w drugiej kolumnie tej samej tabeli wypisze linka tego samego sad.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.