Hyvää huomenta!
Toivon että joku putkalainen osaisi auttaa tämän koodin suunnittelussa koska
itselläni ei ole minkäänlaista ideaa mitenkä tätä lähteä toteuttamaan..
En siis pyydä valmista koodia vaan oikeaan suuntaan ohjaavaa neuvoa...
Olen tekemässä kotisivuilleni eräänlaista järjestelmää jonka kokonaisuuden toimintaperiaate ja käytännön toteutus ei liity ongelmaan joten selitän tämän yksinkertaisemmalla tavalla linkkilista tyyliin.
Eli käyttäjä voi lisätä linkin järjestelmään ja pitäisi saada tarkistettua onko siihen osoitteeseen jo lisätty linkkiä. Ongelma on siinä että samaan osoitteeseen voi päätyä montaa eri kautta.
Esimerkiksi seuraavilla linkeillä pääsee samaan paikkaan:
http://www.google.fi
http://google.fi
http://www.google.fi/
http://google.fi/
http://google
http://www.google.fi/index.php
http://google.fi/index.php
(index.php ei toimi mutta ymmärtänette mitä haen takaa...)
Tämmöisten samankaltaisuuksien automaattinen "estäminen" ei luultavasti onnistu vai olenko väärässä?
Mutta sekin riittäisi mikäli järjestelmä hakee eri käskyllä kaikki linkit joilla on yksi tai enemmän samankaltaista linkkiä ja meikäläinen sitten käsipelissä niitä linkkejä "yhdistelee" ja poistaa tarvittaessa.
Miten tämmöinen haku onnistuu?
Missä muodossa linkit olisi muutenkin järkevintä tallentaa tietokantaan?
Niin ja minulla on kaksi taulua mihin tallennan nämä tiedot.
Toinen on tämän näköinen id,address eli pelkästään osoite tallennetaan tänne.
Ja toisessa on id,uid,aid eli käyttäjän id ja osoitteen id. Tällä olen pyrkinyt siihen ettei tietokannassa ole miljoonaa facebook.comia vaan että yksi linkki johon muut vain "linkittyvät" toisen taulun kautta.
Kiitoksia jokaiselle joka pysähtyy miettimään ongelmaa ja erityis kiitos heille jotka kirjoittavat ja koettavat ohjeistaa tässä tilanteessa.
-t0ll0
Voisit myös tehdä oppivan järjestelmän. Eli pidä kolmannessa taulussa tiedon siitä minkälaisen osotteen olet muuttanut toisenlaiseen. Tämän avulla voit automatisoida osan tehtävästä, mutta joudut läpikäymään uudet osoitteet.
Tämä ei kuitenkaan säästä niin paljon tallennustilaa kuin käsin läpikäynti, mutta aikakin on rahaa.
lisäys.
Jos lisäät käyttäjänlinkkitauluun aikaleiman tai täpän käsittelystä voit hakea vain uudet linkit käsittelyyn. Ja hakea uusille linkeille ne samankaltaiset linkit. Samankaltaisten hakemisessa luultavasti kannattaa parsia uudesta linkistä esim domainnimi ja hakea regexpin avulla kannasta samankaltaisia.
ps. en ole tällähetkellä täysin selvässä mielentilassa, joten jos et saa kirjaamistani ajatuksista selvää, kysy.
Ei hullumpi idea tuo kolmas taulu!
Päädyin kahden taulun järjestelmään kahdesta syystä, toinen on tilansäästö ja toinen on että sivustoni toinen järjestelmä tarvitsee mahdollisimman siistin listan osoitteista mitkä on käytössä.
Kolmannen taulun käyttöönotto ei tilaa säästele mutta idea on heti oikeaan suuntaan sen suhteen että ensimmäinen taulu pysyy siistinä.
-t0ll0
lisäys.
Totta! hakemalla samat domainit niin saadaan ryhmiteltyä linkit jotta ne on helpompi tarkistaa käsipelissä. Toisaalta niitäkin voi olla heti toista sataa, esim jokainen linkkaa oman facebook profiilinsa ja myspace tilansa jne.
Eli katsotaan ymmärsinkö oikein.
Kolme taulua:
Taulu 1: id,address
Taulu 2: id, uid, aid
Taulu 3: id, address, aid
Esimerkki tilanne:
Taulussa yksi on rivi
23, http://www.google.fi/
Taulussa kolme on nämä rivit
1, http://google.fi, 23
2, http://www.google.fi/index.php, 23
3, http://google, 23
Käyttäjä jonka id on vaikkapa 69 haluaa lisätä linkin ja
kirjoittaa lomakkeeseen "http://www.google.fi/index.php"
Tämä tarkistetaan ensin löytyykö kolmannesta taulusta muutettua linkkiä ja tämähän löytyy joten tauluun kaksi ilmestyy rivi
33, 69, 23
Jos taas sama käyttäjä lisää linkin http://google.fi/index.php jota ei löydy kolmannesta taulusta eikä täysin samaa löydy ensimmäisestäkään taulusta niin ensimmäiseen tauluun lisätään rivi
24, http://google.fi/index.php
ja toiseen tauluun
34,69,24
Ja minä sitten käsipelissä kun tarkistelen ja huomaan tämän samankaltaisuuden yhdistän linkit ja toisen taulun rivi muuttuukin
34,69,23 ja osoite http://google.fi/index.php lisätään kolmanteen tauluun odottamaan toista käyttäjää ja sen kirjoittamaa linkkiä.
Taitaa mennä hankalaksi poistaa käyttäjältä linkkejä automaattisesti jos järjestelmä huomaakin että hänellä on kaksi samaa linkkiä: ensin lisätty ja toinen jonka minä olen käsipelissä muuttanut samaksi kuin ensimmäinen...
Onko muilla muunlaisia ehdotuksia mielessä mitenkä tämän voisi toteuttaa?
Varsinkin osoitteiden automaattinen vertailu kiinnostaa eli jos jollakulla on mielessä siihen näppärä tapa niin ehdotuksia otetaan vastaan.
Myös mielipiteitä siitä kannattaako esimerkiksi "http://" ottaa alusta pois. entäpä "www" mikäli löytyy kun tallentaa tietokantaan? https:// olen ottanut huomioon mutta muita haittoja mikäli "säästetään" tilaa poistamalla nuo ja lisäämällä ne a) automaattisesti linkin eteen b) tarvittaessa jollain keinoin.
-t0ll0
Saattaisit saada monia luultavasti samoja osoitteita kiinni katsomalla yksinkertaisesti, löytyykö kannasta osoitetta ilman www:tä tai index.php:tä. Asia pitäisi silti tarkistaa vielä käsin (tai jollain muulla automaattimenetelmällä).
Osoitteen www:tä ei voi poistaa: monella sivustolla se on välttämätön (esim. http://www.med.helsinki.fi/). Myöskään protokollaa ei ole järkevää poistaa; on muitakin mahdollisuuksia kuin http ja https. Käytännössä et edes säästäisi tilaa tuollaisella kikkailulla, mutta turhaa vaivaa siitä varmasti olisi.
Vielä pöpperössä kirjoittelen (ei liity alkoholiin tai huumeisiin).
t0ll0 kirjoitti:
Taitaa mennä hankalaksi poistaa käyttäjältä linkkejä automaattisesti jos järjestelmä huomaakin että hänellä on kaksi samaa linkkiä: ensin lisätty ja toinen jonka minä olen käsipelissä muuttanut samaksi kuin ensimmäinen...
Tapoja on monenlaisia. Jos lisäisit tauluun kaksi uniikkirajotteen (unique constrain) niin ettei samaa riviä (uid, aid) voi lisätä, kanta heittäisi virheen kun yrittäisit muuttaa osotetta jo olemassa olevaksi. Tähän lisäisit vielä virhekäsittelyn haluamallasi tavalla.
Toinen tapa olisi ennen tallennusta hakea samanlaista riviä kannasta ja toteuttaa haluamasi virheenkäsittely.
Metabolix kirjoitti:
Saattaisit saada monia luultavasti samoja osoitteita kiinni katsomalla yksinkertaisesti, löytyykö kannasta osoitetta ilman www:tä tai index.php:tä. Asia pitäisi silti tarkistaa vielä käsin (tai jollain muulla automaattimenetelmällä).
Osoitteen www:tä ei voi poistaa: monella sivustolla se on välttämätön (esim. http://www.med.helsinki.fi/). Myöskään protokollaa ei ole järkevää poistaa; on muitakin mahdollisuuksia kuin http ja https. Käytännössä et edes säästäisi tilaa tuollaisella kikkailulla, mutta turhaa vaivaa siitä varmasti olisi.
En tarkoittanut että www:tä poistettaisiin lopullisesta linkistä, mutta taidat olla oikeassa ettei moisella kikkailulla tilaa säästä kuten myös tuossa protokolla asiassa.
Eli yhteenvetona:
Ennen tallentamista lisätään linkkiin protokolla "http://" oletuksena mikäli siitä ei löydy mitään muutakaan protokollaa(?)*
Tarkistetaan löytyykö järjestelmästä valmiiksi täsmälleen samanlaista linkkiä ja mikäli löytyy niin "linkitytään" siihen.
Mikäli ei löydy tehdään uusi rivi tietokantaan
Sitten käsipelissä yhdistellään linkkejä ja opetetaan järjestelmä puoliautomaatti tasolle...
Vielä kun tutkin tuota "unique constrain" rajoitetta ja sen laitan toimintaan niin ei sama käyttäjä linkitä montaa kertaa samaa osoitetta :)
*onko olemassa valmista funktiota protokollan tunnistamiseen? tätä kysyn sen takia että tarkistan linkin olemassaolon ja mikäli protokollaa ei löydy niin voisi sitten lisätä oletuksena "http://" ja kokeilla sillä löytyykö osoitetta..
Käytän olemassaolon tutkaamiseen @fopen käskyä, mutta on semmonen kutina ettei se ehkä ole varmin tapa tämän ratkaisemiseen. Tämän haitat ja onko parempaa ratkaisua?
Kiitoksia valaisevista vastauksista!
Kokoajan tiedot ja taidot kehittyy :)
-t0ll0
t0ll0 kirjoitti:
En tarkoittanut että www:tä poistettaisiin lopullisesta linkistä
Mutta ajattelepa loogisesti: jos poistat sen tietokannasta, mistä voit tietää, pitääkö se lisätä linkkiin linkkiin vai ei? Joudut siis joka tapauksessa tallentamaan jotain tietokantaan, eikä www vie käytännössä sen enempää tilaa kuin ylimääräinen sarakekaan.
t0ll0 kirjoitti:
onko olemassa valmista funktiota protokollan tunnistamiseen?
Voit tavallisilla merkkijonofunktioilla tarkistaa, onko linkissä kaksoispiste ja onko sitä edeltävä osa sisällöltään protokollaksi kelvollinen. Koko tarkistus onnistuu säännöllisillä lausekkeilla, jotka kannattaa joka tapauksessa opetella vastaisen varalle.
Kiitoksia vastauksista!
Näillä pääsee eteenpäin tässä projektissa :)
-t0ll0
Aihe on jo aika vanha, joten et voi enää vastata siihen.