Witam. Mam problem z rozwiązaniem systemu wyszukiwania książek w bazie danych MySQL. Wcześniej miałem to zrobione na kilku IFach, ale takie wyszukiwanie jest bez sensu. Chciałbym, żeby skrypt działał w ten sposób, że każde dodatkowe pole w formularzu dopełnia zapytanie, ale jeżeli podamy na przykład tylko jedno pole to i tak się nam 'coś' wyszuka. Zrobiłem to wyszukiwanie wzorując się na innym temacie na tym forum, ale w moim przypadku jest ono bez sensu, bo mam osobną tabelę z autorami i osobną tabelę z książkami, które są połączone relacją wiele do wielu(tabela pomocnicza autorzy_to_ksiazki).
Potrzebuje wiec podpowiedzi czy jest wykonalnym zrobienie czegoś takiego stosując jedno zapytanie SQL, czy powinienem ten mechanizm wyszukiwania całkiem inaczej przerobić? A jeżeli tak, to mniej więcej w jaki sposób?
To jest moja baza:
CREATE TABLE IF NOT EXISTS `ksiazki` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tytul` varchar(200) COLLATE utf8_polish_ci NOT NULL,
`wydanie` int(11) DEFAULT NULL,
`miejsce_wydania` varchar(20) COLLATE utf8_polish_ci NOT NULL,
`wydawnictwo` varchar(20) COLLATE utf8_polish_ci NOT NULL,
`rok_wydania` int(11) NOT NULL,
`haslo_przedmiotowe` varchar(20) COLLATE utf8_polish_ci NOT NULL,
`ISBN` varchar(17) COLLATE utf8_polish_ci NOT NULL,
`komentarz` varchar(500) COLLATE utf8_polish_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ISBN` (`ISBN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=12 ;
CREATE TABLE IF NOT EXISTS `autorzy` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`imie` varchar(20) COLLATE utf8_polish_ci NOT NULL,
`nazwisko` varchar(35) COLLATE utf8_polish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=23 ;
CREATE TABLE IF NOT EXISTS `autorzy_to_ksiazki` (
`autor_id` int(11) NOT NULL,
`ksiazka_id` int(11) NOT NULL,
KEY `autor_id` (`autor_id`,`ksiazka_id`),
KEY `ksiazka_id` (`ksiazka_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
CREATE TABLE IF NOT EXISTS `hasla_przedmiotowe` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`haslo` varchar(20) COLLATE utf8_polish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `slowa_kluczowe` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`slowo_klucz` varchar(20) COLLATE utf8_polish_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `slowo_klucz` (`slowo_klucz`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;
CREATE TABLE IF NOT EXISTS `slowa_to_ksiazki` (
`slowo_id` int(11) NOT NULL,
`ksiazka_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
ALTER TABLE `autorzy_to_ksiazki`
ADD CONSTRAINT `autorzy_to_ksiazki_ibfk_2` FOREIGN KEY (`ksiazka_id`) REFERENCES `ksiazki` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `autorzy_to_ksiazki_ibfk_3` FOREIGN KEY (`autor_id`) REFERENCES `autorzy` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
To jest formularz:
<form method="post" action=""> <input id="autor" name="autor" type="text" /> <input id="tytul" name="tytul" type="text" /> <input id="haslo_przedmiotowe" name="haslo_przedmiotowe" /> <input id="rok_wydania" name="rok_wydania" type="text" /> <input id="saveForm" class="button_text" type="submit" name="wyslane" value="Szukaj" />
if(isset($_POST['wyslane'])){
$wh = array(); //inicjalizujemy tablicę z warunkami
if (!empty($_POST['tytul'])) //jeśli podano tytul
$wh[] = "tytul = '".$_POST["tytul"]."' ";
if (!empty($_POST['autor'])) //jeśli podano autora
$wh[] = "autor = '".$_POST["autor"]."' ";
if (!empty($_POST['rok_wydania'])) //jeśli podano rok wydania
$wh[] = "rok = '".$_POST["rok_wydania"]."' ";
if (!empty($_POST['haslo_przedmiotowe'])) //jeśli podano haslo_przedmiotowe
$wh[] = "haslo = '".$_POST["haslo_przedmiotowe"]."' ";
$where = "where k.tytul like '%".$_POST["tytul"]."%' and a.nazwisko like '%".$_POST["autor"]."%'
and k.rok_wydania like '%".$_POST["rok_wydania"]."%' and k.haslo_przedmiotowe like '%".$_POST["haslo_przedmiotowe"]."%' ";
}else{
$where = '';
$sql = 'select * from bibliografia.ksiazki as k, bibliografia.autorzy as a '.$where;
echo "<table cellpadding=\"4\" border=2>"; {
echo "<td>{$row8['tytul']}</td>"; echo "<td>{$row8['nazwisko']}</td>"; echo "<td>{$row8['rok_wydania']}</td>"; echo "<td>{$row8['haslo_przedmiotowe']}</td>"; //return $wynik;
}
//mysql_free_result($wynik);
}
}