Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łączenie tabel, Jedna, zbiorowa tabela do wyszukiwarki
BlackHat
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 9.02.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
BlackHat
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 9.02.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował BlackHat 9.02.2010, 12:22:36
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




bo WHERE dotyczy danego select a nie calego union. Where ma byc dla kazdego select
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:05