Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyszukiwanie z wielu tabel na raz
Forum PHP.pl > Forum > Bazy danych
Ilware
Witam wszystkich serdecznie,

nie jestem pewien czy ten problem bardziej nie nadaje się do przedszkola bo pewnie jest trywialny , ale sam sobie nie potrafię poradzić.

żaby łatwiej wytłumaczyć na czym rzecz polega podam jak wygląda baza:

  1.  
  2. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  3.  
  4.  
  5. SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT ;
  6. SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS ;
  7. SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION ;
  8. SET NAMES utf8 */;
  9.  
  10. DROP TABLE IF EXISTS `asz`;
  11. CREATE TABLE IF NOT EXISTS `asz` (
  12. `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  13. `nazwa` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  14. `adres` text COLLATE utf8_polish_ci NOT NULL,
  15. `tel` varchar(40) COLLATE utf8_polish_ci NOT NULL,
  16. `email` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  17. `www` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  18. `uwagi` text COLLATE utf8_polish_ci,
  19. `nip` varchar(13) COLLATE utf8_polish_ci NOT NULL,
  20. PRIMARY KEY (`id`)
  21. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;
  22.  
  23. DROP TABLE IF EXISTS `bazy`;
  24. CREATE TABLE IF NOT EXISTS `bazy` (
  25. `id` smallint(5) NOT NULL AUTO_INCREMENT,
  26. `nazwa` text COLLATE utf8_polish_ci NOT NULL,
  27. `skrot` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  28. PRIMARY KEY (`id`)
  29. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=4 ;
  30.  
  31. INSERT INTO `bazy` (`id`, `nazwa`, `skrot`) VALUES
  32. (1, 'adfds', 'nowa'),
  33. (2, 'szkoły', 'szkoly'),
  34. (3, 'koło', 'asz');
  35.  
  36. DROP TABLE IF EXISTS `nowa`;
  37. CREATE TABLE IF NOT EXISTS `nowa` (
  38. `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  39. `nazwa` varchar(100) utf8_polish_ci NOT NULL,
  40. `adres` text COLLATE utf8_polish_ci NOT NULL,
  41. `tel` varchar(40) COLLATE utf8_polish_ci NOT NULL,
  42. `email` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  43. `www` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  44. `uwagi` text COLLATE utf8_polish_ci,
  45. `nip` varchar(13) NOT NULL,
  46. PRIMARY KEY (`id`)
  47. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=69 ;
  48.  
  49. INSERT INTO `nowa` (`id`, `nazwa`, `adres`, `tel`, `email`, `www`, `uwagi`, `nip`) VALUES
  50. (1, 'debica', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'aaaa', 872),
  51. (2, 'asd', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'asd', 872),
  52. (3, 'asd', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'asd', 872),
  53. (4, 'asd', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'asd', 872),
  54. (5, 'asd', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'asd', 872),
  55. (6, 'asd', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'asd', 872);
  56.  
  57. DROP TABLE IF EXISTS `szkoly`;
  58. CREATE TABLE IF NOT EXISTS `szkoly` (
  59. `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  60. `nazwa` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  61. `adres` text COLLATE utf8_polish_ci NOT NULL,
  62. `tel` varchar(40) COLLATE utf8_polish_ci NOT NULL,
  63. `email` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  64. `www` varchar(200) COLLATE utf8_polish_ci NOT NULL,
  65. `uwagi` text COLLATE utf8_polish_ci,
  66. `nip` varchar(13) NOT NULL,
  67. PRIMARY KEY (`id`)
  68. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=4 ;
  69.  
  70.  
  71. INSERT INTO `szkoly` (`id`, `nazwa`, `adres`, `tel`, `email`, `www`, `uwagi`, `nip`) VALUES
  72. (1, 'Dębica', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'trzeba usunąń \n', 872),
  73. (2, 'Dębica', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'trzeba usunąń \n', 872),
  74. (3, 'Dębica', 'Dębicaul. Stefana Batorego 13', '(14) 680-33-10| (14) 680-33-36', 'urzad@ugdebica.pl', '', 'aaaa', 872);
  75.  


aktualnie są w niej śmieci a nie w tym rzecz.

Potrzebuję pobrać z bazy wszystkie nazwy oraz id ze wszystkich tabel które pasują do słowa/słów które wpisze użytkownik w przeglądarce.
Inaczej mówiąc muszę sprawdzić czy gdziekolwiek w bazie znajduję się podane słowo, szukam tego na zasadzie '%podane_slowo%'. Ilość tabel się zmienia ponieważ można je usuwać i dodawać nowe.Spis wszystkich tabel które aktualnie znajdują się w DB jest w bazy.skrot, zawsze jest to aktualne i można się na tym opierać.

Z góry dziękuję za pomoc.
Kostek.88
Nigdy nie robiłem czegoś takiego, może Ci coś podpowie poniższa myśl:

  1. <?php
  2. $tabele_query = mysql_query("SHOW TABLES");
  3. while($tabele = mysql_fetch_array($tabele_query)) {
  4.  
  5. // będziesz miał wyniki w zmiennej tablicowej $tabele[0];
  6. // można jakieś instrukcje warunkowe powstawiać, które badają, czy zmienna podana wcześniej formularzu, pasuje do którejś tabeli. A potem następnego SELECT'a (id, name) i po problemie.
  7. }
  8. ?>


Ew. możesz próbować utworzyć z tego funkcję. Tylko nie wiem czy to będzie wydajny skrypt. Dużo będzie tych tabel docelowo ?
Ilware
tabel docelowo nie wiem, w miarę potrzeb będą dodawane nowe. Myślę że może ich być sporo.Jak zacznę tak po kolei przeszukiwać wszystkie tabele to bardzo na wydajności stracę....

Problem rozwiązałem w ten sposób:

  1. require_once("DBconnect.php");
  2. $db = new dbase();
  3. $db2 = new dbase();
  4.  
  5. $word = $_GET['q'];
  6. $sql = "SELECT `skrot` from `bazy`";
  7. if($db->do_query($sql))
  8. {
  9. while($row = $db->get_data("N"))
  10. {
  11. $sql = "SELECT `id` , `nazwa` FROM `".$row[0]."` WHERE 'nazwa' like '%".$word."%' OR 'adres' like '%".$word."%' OR 'tel' like '%".$word."%' OR 'nip' like '%".$word."%'";
  12.  
  13. $db2->do_query($sql);
  14. while($query = $db2->get_data("N")){
  15. $str.="id : ".$query[0]." ".$query[1]." (".$row[0].")\n";
  16. }
  17. }
  18. echo $str;
  19. }else{
  20. echo "Błąd połączenia z Bazą Danych";
  21. }


może komuś się kiedyś przyda. Przy 25 tabelach wydajność nie spada znacząco
vermis
Cały problem w tym, że masz źle zaprojektowaną bazę. Masz 3 tabele o identycznej strukturze i nie bardzo rozumiem po co takie rozwiązanie. Przebuduj bazę i twoje problemy przestaną istnieć.
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.