Mailinglisten-Archive |
hallo Manuel
Manuel Koller wrote:
> Ich muss in mehreren gleichen Tables der gleichen Datenbank eine
> Volltextsuche durchführen.
> Ist es möglich alle mit einem einzigen select-Befehl zu durchsuchen?
> Ich habe es mal mit
> my $ra_resultate = $dbh->selectall_arrayref('select * from Table1,
> Table2 where (subject like '%rot%' or text like '%rot%') and (subject
> not like '%grün%' and text not like '%grün%')');
> probiert, doch dies ergibt den Fehler: "Column: 'subject' in where
> clause is ambiguous".
Nee, das geht leider nicht.
Es muss stattdessen heissen:
select * from Table1 as t1, Table2 as t2
where (t1.subject like '%rot%' or t1.text like '%rot%')
and (t1.subject not like '%grün%' and t1.text not like '%grün%')
or (t2.subject like '%rot%' or t2.text like '%rot%')
and (t2.subject not like '%grün%' and t2.text not like '%grün%');
achte übrigens auf die '... ich nehm an, dass du im script da etwas
andere notation verwendest... ansonsten müsstest du die ' slashen (\')
achte auch darauf, dass je nach tabellen-grösse da die
speicherauslastung etwas hoch ausfallen kann. die tabellen werden
germergt und da kein zusammenhang besteht, ergibt das ne table der
grösse SizeOfTable1 ^ SizeOfTable2 und je nach dem wieviele tabellen du
da hast, kann sich das dann ziemlich schnell in ziemlich hohe regionen
ausweiten.
wie wär's also mit einem vorbereiteten sql-query, welches die tabelle
als parameter erlaubt?
select * from ? where (subject like '%rot%' or text like '%rot%') and
(subject not like '%grün%' and text not like '%grün%');
grüessli, johannes
---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive