Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie "like" do wielu tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
devoth
Witam grupowicze smile.gif

staram się zrobić wyszukiwarkę i mam problem z napisaniem zapytania które znajdowałoby określone wyrażenie (w tym przypadku nazwę telefonu np. "nokia" albo "3210") w kilku tabelach.

Mam następujące tabele:
adaptory, akumulatorki, anteny, anteny_w, bluetooth, ... itd

tabele mają taka samą strukturę, w bazie wyglądają następująco:
[sql:1:055e26575d]CREATE TABLE adaptory (
Lp INTEGER AUTO_INCREMENT PRIMARY KEY DEFAULT 1 NOT NULL,
nazwa VARCHAR(80),
cena_h_n DOUBLE(4,2),
cena_h_b DOUBLE(4,2),
cena_d_n DOUBLE(4,2),
cena_d DOUBLE(4,2),
zdjecie VARCHAR(30),
opis TEXT,
data DATE)[/sql:1:055e26575d]
wszystkie zapisane w tablicy $akcesoria w następujący sposób:
[php:1:055e26575d]<?php
$akcesoria['Adaptory dual-SIM'] = 'adaptory';
$akcesoria['Akumulatorki Li-ion i ni-mh'] = 'akumulatorki';
$akcesoria['Anteny'] = 'anteny';
$akcesoria['Antenki wymienne'] = 'anteny_w';
// i tak dalej...
?>[/php:1:055e26575d]

teraz buduję zapytanie szukające ile jest wystąpień wartości zmiennej $wht w tabeli w polu nazwa
[php:1:055e26575d]<?php
// Otwarcie polaczenia z baza danych
$link = dbConnect();
echo implode(", ",$akcesoria);
// pytam ile jest produktow
$query = "SELECT count(*) FROM akumulatorki where nazwa like "%" . $wht . "%"";

$result = @mysql_query($query);

list($ile_rekordow) = @mysql_fetch_row($result);
?>[/php:1:055e26575d]
Problem polega na tym że niestety tych tabel jest kilkanaście i nie potrafię napisać takiego zapytania któro obsłużyłoby je wszystkie za jednym razem. Jedyne co udało mi się wykombinować po przeczytaniu kilku wątków na tym forum to:
[sql:1:055e26575d]SELECT adaptory.nazwa as 'aa', akumulatorki.nazwa as 'ab' FROM adaptory, akumulatorki where akumulatorki.nazwa like "%nokia%" AND adaptory.nazwa like "%nokia%"[/sql:1:055e26575d]
też mi się to przyda ale w tym momencie potrzebuję count'a, a jak wstawiam count zamiast nazwy to nie działa...
proszę pomóżcie

pozdrawiam
Jabol
union Ci się przyda.
kris_
dlaczego kombinujesz jak koń pod górke, zadaj po prostu kilka zapytań, umieść je w tablicach w php i pokaż wynik w wybranej kolejności.
kris_
Cytat
union Ci się przyda.

pod warunkiem ze to mysql>=4.0.0
Jabol
Cytat
Cytat
union Ci się przyda.

pod warunkiem ze to mysql>=4.0.0
warunków nie podano w poście więc mogę sie czyć wolny do ich własnej interpretacji, nieprawdaż ?
devoth
z kilkoma zapytaniami w sumie nie problem, ale nie wiem jak zrobic to używając union..
to mnie właśnie ciekawi, czytałem o tym w innych postach ale mi zupełnie nie wyszło..
devoth
hmm... mysql raczej < 4
FiDO
No to pozostaje Ci wywolanie kilku zapytan w petli.
adwol
Cytat
Mam następujące tabele:
adaptory, akumulatorki, anteny, anteny_w, bluetooth, ... itd

tabele mają taka samą strukturę

Odpowiedź na zadane pytanie już dostałeś to ja jeszcze zapytam, po co masz tyle jednakowych tabel? Skoro schemat jest taki sam to nie lepiej i prościej trzymać to w jednej i dodać tylko jedno pole określające typ wpisu (adaptory, akumulatorki, anteny, anteny_w, bluetooth, czyli nazwy aktualnych tabel)?
devoth
Adwol - w zupełności się z Tobą zgadzam, tyle że nie ja robiłem tą bazę, a jest tam już około 2000 rekordów. W sumie wczesniej mi to nie przeszkadzało i cały projekt jest już pod to zrobiony, problemy wynikły dopiero teraz.

trochę lipa, ale najwyżej będzie z pętlą

pozdrawiam i dzięki za pomoc
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.