SQL Select

Tags:    databaser

Kan dette lade sig gøre:

Jeg har en database med data fra dmoz. Et felt hedder category og kan indeholde:

World/Dansk/Kultur/Film
World/dansk/Kultur/Film/Biografer
World/Dansk/Kultur/Bøger/Forfattere/A
World/Dansk/Kultur/Musik/Pladeselskaber_og_musikforlag/

Jeg vil trække alle kategorier ud som ligger under Kultur, uden at få kategorier længere nede i hirakiet med.

Ved ikke om jeg udtrykker mig klart nok.

Kan det lade sig gøre med MySql



9 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Kan dette lade sig gøre:

Jeg har en database med data fra dmoz. Et felt hedder category og kan indeholde:

World/Dansk/Kultur/Film
World/dansk/Kultur/Film/Biografer
World/Dansk/Kultur/Bøger/Forfattere/A
World/Dansk/Kultur/Musik/Pladeselskaber_og_musikforlag/

Jeg vil trække alle kategorier ud som ligger under Kultur, uden at få kategorier længere nede i hirakiet med.

Ved ikke om jeg udtrykker mig klart nok.

Kan det lade sig gøre med MySql


select * from xxxx where kategori = 'World/Dansk/Kultur%'

% = vildcard.. den tager ALT bagefter, ? = en char... altså p?ter kunne være pater og peter osv....

Måske skal du bruge LIKE i stedet for = i din sql, kan ikke helt huske det


Med venlig hilsen
/Jokke Jensen
www.jj-multimediedesign.dk



Kan dette lade sig gøre:

Jeg har en database med data fra dmoz. Et felt hedder category og kan indeholde:

World/Dansk/Kultur/Film
World/dansk/Kultur/Film/Biografer
World/Dansk/Kultur/Bøger/Forfattere/A
World/Dansk/Kultur/Musik/Pladeselskaber_og_musikforlag/

Jeg vil trække alle kategorier ud som ligger under Kultur, uden at få kategorier længere nede i hirakiet med.

Ved ikke om jeg udtrykker mig klart nok.

Kan det lade sig gøre med MySql


Du kan også vælge at lave lidt arv i din database i stedet for. (bare for at proøve noget andet).

Fold kodeboks ind/udKode 


så kan du ellers lave dine selects... Her ville du have alle de ting som ligger under kultur:
Fold kodeboks ind/udKode 


Måske ikke helt det svar du ønskede, men siden du havde fået en masse svar på dit direkte spørgsmål, regnede jeg ikke med at det gjorde noget at prøve dette her også :)

-------------------------------
Hilsen Jimmi Westeberg
http://www.westsworld.dk / http://www.aktivudvikler.dk




select * from xxxx where kategori = 'World/Dansk/Kultur%'

% = vildcard.. den tager ALT bagefter, ? = en char... altså p?ter kunne være pater og peter osv....

Måske skal du bruge LIKE i stedet for = i din sql, kan ikke helt huske det



Jeg har prøvet med LIKE og %. Problemet er at den tager alt efter /Kultur/ med - Den skal kun tage den kategori som ligger under /Kultur/ eks. /Kultur/Film/ og /Kultur/Biografer/

Jeg kan selvfølgelig hente det hele, og fjerne det overskydende med PHP, men det er jo spild af tid/rersourcer.

Opgaven er:

SELECT * FROM tabel WHERE kategori LIKE 'World/Dansk/Kultur/%'

Strengen skal så stoppe ved det næste /

Kan man bruge strengfunktioner i Mysql??




hvad med

SELECT * FROM tabel WHERE kategori LIKE 'World/Dansk/Kultur/%' and kategori NOT LIKE 'World/Dansk/Kultur/%/%'



ja, mysql har en del string funktioner:

http://dev.mysql.com/doc/mysql/en/string-functions.html



Jeg løste problemet med den vildeste SQL-sætning:

SELECT DISTINCT SUBSTRING( category, {$urllaengde} +1, IF(LOCATE( '/' , category, {$urllaengde} +1 ), LOCATE( '/' , category, {$urllaengde} +1 ) - {$urllaengde}-1, LENGTH(category)) ) AS result FROM dmozimport WHERE category LIKE '{$url}%'"

Grimt



Hejsa,

(bemærk! dette er ikke et svar, men en kommentar)

Som Jimmi anbefaler, så kunne du jo vælge at kigge på tabellens opbygning i stedet, og det vil jeg give ham ret i! -Det du har fundet frem til som "løsning", er ikke en god løsning, nærmere blot omgåelse af dårligt design...

De data du beskriver hører ingen steder hjemme i lange tekststrenge! -de bør ligge i en parent/child struktur i databasen, som både gør dem langt nemmere at tilgå, men også kan spare dig for RIGTIG mange hovedpiner senere hen, hvis dit datagrundlag går hen og udvider sig, eller skal udvikles i den ene eller anden retning....det nuværende design er simpelthen MEGET LIDT dynamisk...

Lad det være et godt råd...jo før du skifter spor til et bedre design, jo mindre skal du kode om...

Venlig hilsen
Jon Krondal Honum

[Redigeret d. 08/03-05 14:41:26 af Jon Krondal Honum]



Kan kun give Jon ret! Din løsning er meget nasty!!

Slot\\\\ - All your base are belong to us
http://www.sigsys.dk



Kan kun give Jon ret! Din løsning er meget nasty!!

Slot\\\\ - All your base are belong to us
http://www.sigsys.dk


Tak for jeres gode svar.

Jeg er godt klar over at det er en rigtig uhensigtsmæssig måde tabellen er bygget op på. Den er lavet af et Perl script, som parser hele rdf filen fra dmoz ud i en mysql database. Jeg har ikke lige styr på XML og Perl, så jeg har ikke mulighed (eller ved ikke hvordan) for at ændre det. Der er 55000 poster i databasen.

Jeg har lagt resultatet ud her: www.odp.dk



t