/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Udtrække værdier fra database og et
Fra : Kim Ludvigsen


Dato : 18-10-11 18:30

Jeg har en database med en række med tags i stil med:
tag1-tag2-tag3-------
tag1---------
---------
Der er plads til 10 tags i strengen, men der er typisk
mellem 0 og 3, så strengen fx ser ud som ovenstående eksempler.

Jeg vil have lavet en tags-oversigt, hvilket vil sige, at
jeg skal have hentet alle tagstrenge fra databasen og så
frasorteret dubletter. Men jeg går kold, fordi jeg ikke kan
finde ud af at bruge arrays, og i dette tilfælde vist arrays
i arrays.

Her er hvad jeg har lavet:
while($tagsrow = mysql_fetch_array($resulttags)) {
$tagsexploded[] = explode('-', $tagsrow['tags']);
}

Så vidt jeg kan se, er resultatet arrays i et array, og
array_unique giver ikke det ønskede resultat med en liste
over tags, men dette:
Array ( [0] => Array ( [0] => [1] => [2] => [3] => [4] =>
[5] => [6] => [7] => [8] => [9] => ) )

Jeg kan se, at tag'ene er blevet explodet, som de skal, så
det er kun det sidste skridt, jeg mangler. Her et eksempel
på resultatet inden array_unique:
Array ( [0] => Array ( [0] => [1] => [2] => [3] => [4] =>
[5] => [6] => [7] => [8] => [9] => ) [1] => Array ( [0] =>
tag1 [1] => tag2 [2] => [3] => [4] => [5] => [6] => [7] =>
[8] => [9] => ) [2] => Array ( [0] => tag1 [1] ...

Nogle forslag til, hvordan jeg kommer videre?

--
Mvh. Kim Ludvigsen
Hjælp til computeren og internettet:
http://kimludvigsen.dk

 
 
Stig Johansen (19-10-2011)
Kommentar
Fra : Stig Johansen


Dato : 19-10-11 08:28

Kim Ludvigsen wrote:

> Jeg har en database med en række med tags i stil med:
> tag1-tag2-tag3-------
> tag1---------

Dårligt databasedesign!

Det er en 'dead end', som du sikkert har (eller vil) fundet ud af.

En ommer.

--
Med venlig hilsen
Stig Johansen

Martin Larsen (19-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 19-10-11 12:21

Kim Ludvigsen wrote:

> Her er hvad jeg har lavet:
> while($tagsrow = mysql_fetch_array($resulttags)) {
> $tagsexploded[] = explode('-', $tagsrow['tags']);
> }

Som Stig skriver er databasedesignet ikke ligefrem optimalt. Men når det
så er sagt, kan du sagtens gøre det. Du skal bare bruge array_merge:

$tagsexploded = array();
while($tagsrow = mysql_fetch_array($resulttags)) {
$tagsexploded = array_merge($tagsexploded, explode('-',
$tagsrow['tags']));
}
$tagsexploded = array_unique($tagsexploded);


Kim Ludvigsen (19-10-2011)
Kommentar
Fra : Kim Ludvigsen


Dato : 19-10-11 13:57

Martin Larsen skrev:
>
> Som Stig skriver er databasedesignet ikke ligefrem optimalt.

Jeg går ud fra, at I tænker på relationsdatabaser med
tag'ene i en base for sig selv. Sidst jeg prøvede med
relationsdatabaser, kæmpede jeg alt for meget med det, så
jeg ledte efter noget lettere (for mig) denne gang.

> Men når det så er sagt, kan du sagtens gøre det. Du skal
> bare bruge array_merge:

Det vil jeg prøve, tak!

--
Mvh. Kim Ludvigsen
Gør din hjemmeside mere intelligent, begynderguide om PHP:
http://kimludvigsen.dk/programmer-internet-kompozer-trin-php.php

Jonathan Stein (19-10-2011)
Kommentar
Fra : Jonathan Stein


Dato : 19-10-11 18:37

Den 19-10-2011 14:56, Kim Ludvigsen skrev:

> Jeg går ud fra, at I tænker på relationsdatabaser med tag'ene i en base
> for sig selv. Sidst jeg prøvede med relationsdatabaser, kæmpede jeg alt
> for meget med det, så jeg ledte efter noget lettere (for mig) denne gang.

Hvis du faktisk mener "base", kan jeg godt forstå, at du har kæmpet med det.
Dine tags bør ligge i en selvstændig tabel, men i samme database.

M.v.h.

Jonathan

Kim Ludvigsen (19-10-2011)
Kommentar
Fra : Kim Ludvigsen


Dato : 19-10-11 19:02

Jonathan Stein skrev:
> Den 19-10-2011 14:56, Kim Ludvigsen skrev:
>
>> Jeg går ud fra, at I tænker på relationsdatabaser med
>> tag'ene i en base
>> for sig selv.
>
> Hvis du faktisk mener "base", kan jeg godt forstå, at du har
> kæmpet med det.

Nej, jeg mente tabel. Men det drillede alligevel en del,
omend jeg ikke længere kan huske, hvad problemet/problemerne
var.

--
Mvh. Kim Ludvigsen
Tips til hjemmesidesnedkeren:
http://kimludvigsen.dk/tips-internet-websnedker.php

Martin Larsen (19-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 19-10-11 19:08

Kim Ludvigsen wrote:

> Nej, jeg mente tabel. Men det drillede alligevel en del, omend jeg ikke
> længere kan huske, hvad problemet/problemerne var.

Det har sikkert været mange-til-mange-relationen som har drillet. Det er
faktisk ikke så svært, men man skal holde tunge lige i munden når man
arbejder med dem.

En sådan relation er nødvendig fordi der er mange tags der hver kan
knyttes til mange artikler, og hver artikel kan have mange tags.

I visse tilfælde kan det faktisk godt være mere effektivt at arbejde som
du gør idet der er en del overhead ved den join som skal binde de 3
tabeller sammen. Det kommer lidt an på i hvilke grad du skal udtrække og
analysere efter tags.

Kim Ludvigsen (19-10-2011)
Kommentar
Fra : Kim Ludvigsen


Dato : 19-10-11 20:02

Martin Larsen skrev:
> Kim Ludvigsen wrote:
>
>> Nej, jeg mente tabel. Men det drillede alligevel en del,
>> omend jeg ikke
>> længere kan huske, hvad problemet/problemerne var.
>
> I visse tilfælde kan det faktisk godt være mere effektivt at
> arbejde som du gør idet der er en del overhead ved den join
> som skal binde de 3 tabeller sammen. Det kommer lidt an på i
> hvilke grad du skal udtrække og analysere efter tags.

I første omgang skal jeg ikke analysere eller noget i den
stil, det var udelukkende for at få en liste over
eksisterende tags.

På længere sigt vil jeg måske lave en prioriteret liste med
fremhævelse af de mest populære tags, men det kan sagtens
laves uden join, fx ved at have en selvstændig tabel, som
ikke skal forbindes med den eksisterende tabel, men hvor der
blot tælles op for hver gang, der klikkes på et tag.

--
Mvh. Kim Ludvigsen
Hold din drømmeferie i Thailand. Find tips og info på:
http://rejse-til-thailand.dk

Kim Ludvigsen (19-10-2011)
Kommentar
Fra : Kim Ludvigsen


Dato : 19-10-11 15:17

Martin Larsen skrev:

> $tagsexploded = array();
> while($tagsrow = mysql_fetch_array($resulttags)) {
> $tagsexploded = array_merge($tagsexploded, explode('-',
> $tagsrow['tags']));
> }
> $tagsexploded = array_unique($tagsexploded);

Det virker fint, jeg skulle blot have tilføjet lidt kode med
unset for at fjerne tomme elementer.

Når jeg en dag får overskud til det, vil jeg prøve at se
nærmere på en selvstændig database til tag'ene.

--
Mvh. Kim Ludvigsen
Undgå faldgruberne, sådan vælger du det rette webhotel:
http://kimludvigsen.dk/tips-internet-websnedker-webhotel.php

Kim Ludvigsen (19-10-2011)
Kommentar
Fra : Kim Ludvigsen


Dato : 19-10-11 15:28

Kim Ludvigsen skrev:

> Det virker fint, jeg skulle blot have tilføjet lidt kode med
> unset for at fjerne tomme elementer.

Jeg vrøvler, det var array_values, jeg brugte til at fjerne
tomme elementer og ikke unset.

--
Mvh. Kim Ludvigsen
Det nemmeste komma:
http://ordforklaring.dk/ordforklaring.php?forklaring=decimalkomma

Bertel Lund Hansen (20-10-2011)
Kommentar
Fra : Bertel Lund Hansen


Dato : 20-10-11 09:01

Kim Ludvigsen skrev:

> Når jeg en dag får overskud til det, vil jeg prøve at se
> nærmere på en selvstændig database til tag'ene.

Om sprogbrug:
At dele et projekt op på to databaser giver ikke mening medmindre
det ene modul skal bruges i flere uafhængige databaser.

Det du mener, er (formodentlig) en særskilt tabel indenfor samme
database.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409070
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste