Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łączenie tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
BlackHat
Witam,
Pracuje obecnie nad połączeniem kilku tabel, a mianowicie muszę połączyć 7 tabel jako jedna zbiorczą ( do wyszukiwarki)
niestety UNION odpada ponieważ niektóre bazy nie zawierają niektórych kolumn, bądź mają inną nazwę.
Przykładowe tabele:
t1:
ID|tytul_pl|tytul_en|autor|sum_pl|sum_en|tresc|keywords_pl|keywords_en
t2:
ID|tytul|autor|autor|summary|keywords|tresc
t3:
ID|tytul_pl|tytul_en|autor|sum_pl|sum_en|tresc|keywords_pl
Zdaję sobie sprawę że jest to chaotycznie zaprojektowane, niestety nie ja je tworzyłem.
Za wszelkie wskazówki będę wdzięczny.
Pozdrawiam,
BlackHat
phpion
UNION jak najbardziej się tu sprawdzi. Kolumnom, które nie występują w danej tabeli dawaj wartości domyślne, np. NULL. Przykład:
  1. (SELECT id, nazwa, opis FROM tabela)
  2. UNION
  3. (SELECT id, NULL, opis FROM inna_tabela); -- 'inna_tabela' nie ma kolumny 'nazwa' więc dajemy w to miejsce NULL

Dzięki temu uzyskasz to, co chcesz. Pamiętaj tylko, że każdy SELECT musi zwrócić tyle samo kolumn i o takich samych typach.
BlackHat
Dziękuję za szybką odpowiedź, niestety problem jest trochę bardziej skomplikowany, ponieważ niektóre kolumny mają inne nazwy, bądź są w innym miejscu. zamieszczę dokładna kolejność.
tabela anestezjologia:
id tytul_pl autor adres tytul_en sum_en keywords_en sum_pl keywords_pl tresc
tabela balneo:
id tytul_pl tytul_en autor adres summary_pl kewords_pl summary_en keywords_en tresc
tabela farmako:
id tytul_pl autor adres tytul_en sum_en keywords_en sum_pl keywords_pl tresc
tabela newmedicine:
id autor adres tytul summary keywords tresc
W momencie gdy daje do sql komendę
CODE
SELECT tytul_pl, autor,tytul_en, sum_en,keywords_en,
sum_pl,keywords_pl,tresc
FROM anestezjologia
UNION SELECT
tytul_pl, autor,tytul_en, summary_en,keywords_en, summary_pl, kewords_pl,tresc
FROM balneo
WHERE MATCH(autor, tytul_pl, tytul_en,
keywords_en, keywords_pl, tresc, summary_en, summary_pl) AGAINST
('fraza')

Wyrzuca mi błąd
CODE
#1054 - Unknown column 'keywords_pl' in 'where clause'

co jest spowodowane inna nazwą kolumny w tabeli balneo (keywords_pl to kewords_pl)
Zastanawiam się jak to rozwiązać.
Pozdrawiam,
BlackHat
nospor
bo WHERE dotyczy danego select a nie calego union. Where ma byc dla kazdego select
phpion
Cytat(nospor @ 9.02.2010, 12:25:21 ) *
bo WHERE dotyczy danego select a nie calego union. Where ma byc dla kazdego select

Albo można wrzucić całe UNION w podzapytanie czyli:
  1. SELECT * FROM (
  2. (SELECT ...)
  3. UNION
  4. (SELECT ...)
  5. ) AS t WHERE ...

Wtedy warunek piszemy tylko raz.
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.