Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: SQL -taulukosta hakeminen

Haraldinho [28.02.2014 00:28:04]

#

Olen jo jonkin aikaa pähkäillyt, enkä googlettamallakaan äkkiä löydä ratkaisua pulmaani:

Olen siis rakentanut järjestelmän, jossa voi kirjoittaa blogipostauksia. Kun postaus tallennetaan tietokantaan, sille täytetään id:n ja muiden tarpeellisten sarakkeiden lisäksi tagit -sarake, johon kirjoitetaan käyttäjän antamat tagit pilkuilla erotettuina.

Ongelma on se, että miten voin hakea tietokannasta tietyllä tagilla kaikki postaukset, joille tagi on listattu.

Esimerkki:

Tietokannassa oleva taulukko:

artikkeli a:n tagit = porkkana, sipuli, peruna
artikkeli b:n tagit = porkkana, kaali
artikkeli c:n tagit = omena

Kun haetaan "porkkana", tulostetaan "a" ja "b"

The Alchemist [28.02.2014 00:37:21]

#

Tagien pitäisi olla omassa taulussaan ja jokaisen tagin omana rivinään. Jos välttämättä vaadit tehdä asiat väärin, niin sinuna tyytyisin siihen, että haetaan epämääräisellä LIKE-ehdolla:

SELECT a.* FROM posts a WHERE a.tag LIKE '%tagfoo,%';

Tuollainen siis täsmäisi paitsi haettuun tagiin, niin myös kaikkiin muihin tageihin, jotka loppuvat vastaavaan merkkijonoon. Ja lisävaatimuksena on toki se, että viimeisenkin tagin jälkeen täytyy tulla pilkku.

p99o [28.02.2014 00:37:25]

#

En voi mitenkään 100-varmasti sanoa mutta voisiko/kannattaisiko homma tehdä niin että jokainen tagi on omalla rivillään [blogiid, tagi] ?

googlettamalla: "php tag system mysql" sain nämä sivut:
http://stackoverflow.com/questions/14430259/mysql-php-tag-system
http://stackoverflow.com/questions/19447554/tag-system-using-php-mysql

joten kenties joku LIKE-systeemi

tai ehkäpä... http://mahmudahsan.wordpress.com/2008/08/27/mysql-the-group_concat-function/

Haraldinho [28.02.2014 00:42:42]

#

Kiitos nopeasta vastaamisesta!

Vaikuttaisi hyvältä tuo systeemi, että tehdään tageille oma taulukko, kokeilen sitä. Tuo LIKE -juttu ei käsittääkseni ole paras mahdollinen ratkaisu.

The Alchemist [28.02.2014 00:46:34]

#

Ei tuo hakukysely ole mikään hirveän iso ongelma mutta tagien hallinta käy vaikeaksi, kun jokainen muutos tageihin vaatii koko tagirimpsun kirjoittamisen uusiksi.

p99o [28.02.2014 13:10:07]

#

Tai jos tekisit oman taulun jossa jokainen tagi omana rivinään
niin merkkijonosta:

$_POST['tagit'] = "ohjelmointi, php, mysql, foo";

saisi jokaisen talteen

$tagit = explode(",",$_POST['tagit']); //array, erotetaan pilkulla
//$tagit[0]  "ohjelmointi"
//$tagit[1]  "php"

tästä sitten jokainen arvo kantaan loopilla, jotenkin näin...
Ensin pitää tietenkin syöttää blogi, ja saada siitä blogin ID

$dbconnetion->LastInsertid(); //jotenkin näin ;P
foreach ($tagit as $tag) {
    $query = 'INSERT INTO blogtags (blogid, tag) VALUES (?,?)';
    $this->db->query(array(x,y));
}

Näin ainkin poistaminen, lisääminen ja päivittäminen onnistuu ilman lisäkikkailua, ja hakeminen myös.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta