Even though another answer was accepted... I explained this idea a little more because I feel that it meets "best practices" and allows you to associate more than one word with one item while not repeating data.
You should end up with three tables:
item: item_id | Brand | model |additional products | price
word: word_id | word
item_word: item_word_id | item_id | word_id
the data would look like:
Item:
item_id brand model additional_products price
1 nokia g5 100
2 toshiba satellite 1000
word:
word_id word
1 1 GB
2 ATA
3 SATA
4 512BG RAM
item_word:
item_word_id itwm_id word_id
1 1 1
2 1 2
3 2 3
4 2 4
so that nokia
had these words: 1 GB, ATA
and toshiba
had these words: SATA, 512BG RAM
. (I realize this doesn't make much sense, it's just an example)
then query it like..
select item.*, word
from item
join item_word on item.item_id = item_word.item_id
join word on item_word.word_id = word.word_id
and filter it like...
select item.*, word
from item
join item_word on item.item_id = item_word.item_id
join word on item_word.word_id = word.word_id
where word in ('1GB RAM', '512GB RAM', 'ATA')
to see what is the most relevant result you could even try...
select item.item_id, item.brand, item.model, count(*) as word_count
from item
join item_word on item.item_id = item_word.item_id
join word on item_word.word_id = word.word_id
where word in ('1GB RAM', '512GB RAM', 'ATA')
group by item.item_id, item.brand, item.model
order by count(*) desc
for something that matches all the words provided, you would use...
select item.item_id, item.brand, item.model, count(*) as word_count
from item
join item_word on item.item_id = item_word.item_id
join word on item_word.word_id = word.word_id
where word in ('1GB RAM', 'ATA')
group by item.item_id, item.brand, item.model
having count(*)=2
where 3 is the number of words in your in
statement... word in ('1GB RAM', 'ATA')
. in this case it was 2
.
if you just do...
item: Brand | model |additional products | price | long_word_string
then you have to do...
select *
from item
where long_word_string like '1GB RAM' or word like 'ATA'
or even...
select *
from item
where long_word_string regexp '1GB RAM|ATA'
but those are very inefficient/costly methods... and it is better to just normalize things so you're not storing extra data and killing performance trying to get it out
does that make sense? does it answer your question?
edit: my answer lost out to just two tables... i'm concerned for OP's database now.