[MySQL] LIKE- wyszukiwarka i struktura danych

0

Witam. Mam marzenie (raczej do tego można to zaliczyć). O to struktura mojej bazy


| id | temat | tresc | wersja |
|_______________________________________________|
1 php php to jezyk.... 1
2 mysql mysql cos tam 1
3 delphi delphi cos tam 1
4 assembler assembler cos.. 1
5 c++ cos tam... 1
6 php php to jezyk.... 2
7 php php to jezyk.... 3
I chce zrobić mini wyszukiwarkę.
No to wyszukuje poprzez LIKE:

Select * From artykuly Where tresc LIKE '%php to jezyk%'

I w wyniku dostaje


| id | temat | tresc | wersja |
|_______________________________________________|
1 php php to jezyk.... 1
6 php php to jezyk.... 2
7 php php to jezyk.... 3

I teraz jest moj problem. Da się coś poradzić, by był wyświetlany tylko ten wynik, gdzie jest max(wersja), to znaczy


| id | temat | tresc | wersja |
|_______________________________________________|
1 php php to jezyk.... 1
6 php php to jezyk.... 2
było by usuwane gdyż wersja jest mniejsza niż od najnowszej czyli 3:
7 php php to jezyk.... 3

Czyli reasumując (dość zawile). Wybrać wszystkie rekordy. Jeśli będzie sytuacja że temat będzie się powtarzał, to zostanie wybrany z tych powtarzających rekordów ten rekord gdzie wersja jest maksymalna. I z tego co uzyskamy wyszukać tresc LIKE '%php to jezyk%'
Czy to realne jest? Czy poszukać czegoś innego w katalogu marzeń z netii?

0

Dwa pomysly mi wpadly do glowy tak na szybko. Jeden to stworzenie z twojego zapytania perspektywy i wtedy latwo moznaby wybrac max(wersja). Albo tak na szybko, troche "łopatologicznie" (tylko jezeli wyniki roznia sie jedynie wersją) to mozesz na koncu dac ORDER BY wersja LIMIT 1.

Mysle, ze ktos kto na codzien ma wiecej do czynienia z bazami danych moglby CI podsunąc jeszcze inne, pewnie lepsze pomysly. Ja to raczej amatorsko ;)

//Mozna by jeszcze z podzapytaniem, ale to na sucho więc nie wiem czy dobrze to:
Select * From artykuly Where tresc LIKE '%php to jezyk%' and wersja =
(Select max(wersja) From artykuly where tresc LIKE '%php to jezyk%')
P.S. zauwazylam, ze wiedza nieużywana ulega zapomnieniu

0
Select * From artykuly Where tresc LIKE '%php to jezyk%' having wersja = max(wersja)
0
Select * From artykuly Where tresc LIKE '%php to jezyk%' and wersja =
   (Select max(wersja) From artykuly where tresc LIKE '%php to jezyk%') 

To nie odpowiada. Jak będę wyszukiwał w tabeli:


| id | temat | tresc | wersja |
|_______________________________________________|
1 php php to jezyk.... 1
2 mysql php to jezyk.... 1 <-zmiana
3 delphi delphi cos tam 1
4 assembler assembler cos.. 1
5 c++ cos tam... 1
6 php php to jezyk.... 2
7 php php to jezyk.... 3
To wyświetli mi tylko 1 rekord :
7 php php to jezyk.... 3

a zapomni o
2 mysql php to jezyk.... 1
Gdyby te zapytanie było by w stylu:

Lecz dziękuje- podsunęłaś mi myśl.

SELECT *
FROM `artykuly` S
WHERE `tresc` LIKE '%php to jezyk%'
AND `wersja` = (
SELECT max( wersja )
FROM artykuly
WHERE `temat` = S.temat
)

Lecz czytałem że like jest nieodpowiednie do wyszukiwania, więc korzystam z :

SELECT *
FROM `artykuly` S
WHERE match(tresc) against('jezyk to php')
AND `wersja` = (
SELECT max( wersja )
FROM artykuly
WHERE `temat` = S.temat
)

@Misiekd:

SELECT * FROM artykuly WHERE tresc LIKE '%php to jezyk%' HAVING wersja = max(wersja)

Wyświetla mi 0 wyników.
Dzięki za odpowiedzi. Jednak to realne było.
Jeszcze jedno. Zapewnie takie zapytane obciąża serwer. Jeśli jest jakaś możliwość zoptymalizowania zapytania, nie pogniewam się, jeśli ktoś napisze.

0
SELECT temat, MAX(`wersja`) FROM `TEST` WHERE 
`tresc` LIKE '%php to jezyk%'
GROUP BY `temat`

1 użytkowników online, w tym zalogowanych: 0, gości: 1