Hei,
Eli olisiko toteutusideoita seuraavalle ongelmalle. Tietokannassa on siis tietoa kahdessa sarakkeessa, esim:
Otsikko | Sisältö
Suomi voitti | Suomi voitti venäjän jääkiekon avauskisassa
Ruotsi hävisi | Ruotsi hävisi rangaistuslaukauksilla
Japani hävisi | Japanin alkulohko alkoi ankeasti
Eli miten saisin järkeviten toteutettua sellaisen tietokanta kyselyn, joka paitsi hakee molemmista sarakkeista, eli otsikko ja sisältö sarakkeesta, niin myös jollain tavoin pisteyttää hakusanoja.
Siis jos haluttaisiin että hakusanat pisteytettäisiin seuraavasti:
suomi = 3 pistettä
ruotsi = 2 pistettä
hävisi = 1 pistettä
voitti = 1 pistettä
Ja nyt kun tietokannasta haetaan, niin tulostetaan sellaiset RIVIT joiden molempien sarakkeiden yhteenlaskettu pistearvo on 3 tai enemmän.
Ratkaisuehdotuksia otetaan vastaan =)
SELECT * FROM taulu WHERE ... ORDER BY IF(INSTR(CONCAT(otsikko, sisalto), "Suomi"), 3, 0) + IF(INSTR(CONCAT(otsikko, sisalto), "Ruotsi"), 2, 0) + IF(INSTR(CONCAT(otsikko, sisalto), "hävisi"), 1, 0) + IF(INSTR(CONCAT(otsikko, sisalto), "voitti"), 1, 0) DESC
Suuret kiitokset Metabolix. Eikös INSTR funktiolle tule antaa 2 parametriä?
Eli jos laitan MySQL kyselyn:
mysql> SELECT INSTR('foobarbar', 'bar');
Niin yllä oleva tulostaa numeron 4. Eli miten ihmeessä tuo nyt pisteyttää nuo haluamani hakusanat? =P
En ole vielä kokeillut antamaasi koodia, koska ensin tahtoisin vain ymmärtää, enkä vain plagioida =D
Katso koodia tarkemmin (siinähän on kaksi parametria INSTR-funktiolle) ja lue MySQL:n dokumentaatiosta funktioiden INSTR ja IF kuvaukset.
Pari esimerkkiä:
SELECT 123 = 123; -- 1, koska vertailu on tosi. SELECT 123 = 456; -- 0, koska vertailu ei ole tosi. SELECT IF(0, 123, 456); -- 456, koska ensimmäinen arvo on 0. SELECT IF(1, 123, 456); -- 123, koska ensimmäinen arvo ei ole 0. SELECT INSTR("abcd", "d"); -- 4, koska siinä kohti on d. SELECT INSTR("abcd", "x"); -- 0, koska x:ää ei löydy. SELECT IF(INSTR("abcd", "d"), 123, 456); -- 123, koska d löytyy. SELECT IF(INSTR("abcd", "x"), 123, 456); -- 456, koska x:ää ei löydy.
Voit myös käyttää INSTR-funktion tilalla ehkä tutumpaa LIKE-tarkistusta, mutta minusta INSTR on helpompi, kun haettavassa tekstissä ei ole jokerimerkkejä (% tai _).
Aihe on jo aika vanha, joten et voi enää vastata siihen.