Gak! That is one ugly SELECT statement! Even if you were able to get it to run, the performance is going to be terrible due to the leading wildcards ('%___') not allowing index usage.
To answer your question, you could use a UNION operator. For example:
$sql_query3 = "SELECT FROM dbtable where".
" index LIKE '%$search_str%'".
" OR title LIKE '%$search_str%'OR author LIKE '%$search_str%'".
" OR summary LIKE '%$search_str%' OR source LIKE '%$search_str%'".
" OR theme1 LIKE '%$search_str%' OR theme2 LIKE '%$search_str%'".
" OR theme3 LIKE '%$search_str%' OR theme4 LIKE '%$search_str%'".
"UNION ".
"SELECT FROM dbtable where".
" theme5 LIKE '%$search_str%' OR organisation LIKE '%$search_str%'".
" OR organisation2 LIKE '%$search_str%'".
" OR organisation3 LIKE '%$search_str%'".
" OR organisation4 LIKE '%$search_str%'".
...etc...
Unfortunately that doesn't improve search times if dbtable is large. Another approach would be to keep a separate table for search keys. Assuming the primary key on dbtable is a number, then:
CREATE TABLE dbtable_keys
(dbtable_record_id NUMBER,
key_value VARCHAR(___));
On INSERT into dbtable:
INSERT INTO dbtable_keys VALUES (dbtable_primary_key, dbtable_index);
INSERT INTO dbtable_keys VALUES (dbtable_primary_key, dbtable_title);
INSERT INTO dbtable_keys VALUES (dbtable_primary_key, dbtable_author);
INSERT INTO dbtable_keys VALUES (dbtable_primary_key, dbtable_summary);
INSERT INTO dbtable_keys VALUES (dbtable_primary_key, dbtable_source);
...etc...
To search for a string then becomes:
$sql_query = "SELECT *"
" FROM dbtable"
" WHERE dbtable_primary_key IN (SELECT dbtable_record_id".
" FROM dbtable_keys"
" WHERE key_value LIKE '%$search_str%')";
Still not ideal performance, but greatly improved over 40+ full table scans.
-- Michael
Darkstreak Computing & Innovations
www.darkstreak.com