I'm having trouble figuring out the logic/query I want.
I know that all those "OR"s are not right.
I'm doing this in PHP and mySQL (of course),
so if it can't be done with a single query, I can split it up.
Here's the challenge, given a text field search box, someone enters:
Sony 20" TV
How do I search for that, not knowing which fields are which?
For example, they could have also entered:
20" Sony TV
This is the one I have now, but (as you probably noticed), it will return many
rows,
I expect that most of the time > 1 row will be returned, but I'm getting a grip
more than I want (or the customer would want), and
also rows that have nothing to do with the search terms.
SELECT products.*, companies.name AS company_name, categories.name AS
category_name
FROM products
LEFT JOIN companies ON company_id = companies.id
LEFT JOIN categories ON category_id = categories.id
WHERE products.enabled = 1
AND(
(products.model LIKE 'sony%' OR products.model LIKE '20%' OR
products.model LIKE 'tv%')
OR (products.upc LIKE 'sony' OR products.upc LIKE '20' OR
products.upc LIKE 'tv')
OR (products.name LIKE '%sony%' OR products.name LIKE '20%' OR
products.name LIKE '%tv%')
OR (companies.name LIKE 'sony%' OR companies.name LIKE '20%' OR
companies.name LIKE 'tv%')
OR (categories.name LIKE '%sony%' OR categories.name LIKE '20%' OR
categories.name LIKE '%tv%')
)
ORDER BY categories.name DESC, products.name ASC, companies.name ASC;
(and that just gets uglier the more words in the search)
+----+------------------+--------------+--------------+---------------+
| id | name | model | company_name | category_name |
+----+------------------+--------------+--------------+---------------+
| 1 | 20" TV | STV20-KVR-HD | Sony | Tube | <---
| 2 | 36" TV | STV36-KVR-HD | Sony | Tube |
| 4 | Ultra-Plasma 62" | UP62F900 | Sony | Plasma |
| 5 | Value Plasma 38" | VPR542_38 | Sony | Plasma |
| 6 | Power-MP3 5gb | 09834wuw34 | Sony | MP3 Players |
| 3 | Super-LCD 42" | SLCD42hd002 | Sony | LCD |
| 7 | Super-Player 1gb | SP1gb | Sony | Flash |
| 8 | Porta CD | pcd500 | Sony | CD Players |
......
+----+------------------+--------------+--------------+---------------+
Obviously the person wanted id = 1 in this case.
Unrelated, is there any speed improvement using JOIN instead of LEFT JOIN ?
Think millions of products.
Thanks for help and suggestions...
Daevid.
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]