Avatar billede masteraaen Novice
24. februar 2011 - 22:34 Der er 2 kommentarer og
1 løsning

Tæl antal registreringer med explode i kolonne (sql) PHP

Hej.

Jeg har en tabel, sql, hvori den ene kolonne bliver opdateret med et tal, hver gang en bestemt handling sker.
Disse tal adskilles med "-" i tabellen, hver gang en ny handling lægges ind i samme "celle" i tabellen.

Dvs en record i kolonne kan fx. indeholde tallene "10-8-204-344" mens andre er helt tomme og nogen fx indeholder "1-2-11100-3-4-5-6-7".

Det er altså ikke til at vide, hvor mange registreringer, der er indeholdt i de enkelte records kolonner.

Jeg har brug for tallene - et efter et, og det havde jeg tænkt mig via "explode" formlen.

Men jeg får brug for en løkke, der løber lige så mange gange, som der vindes registreringer i den enkelte record i denne kolonne.

Dvs, som ville løbe hhv. 4 gange, 0 gange og 8 gange ift. ovenstående eksempler.

Kan det lade sig gøre?

På forhånd tusinde tak.
25. februar 2011 - 06:28 #1
Jeg lavede en minitabel og en testside hvor jeg skal give koden nedenfor.  Jeg har saa trukket talvaerdierne ud paa to maader, en uden loekke og en med loekke.  Du kan se resultatet her:

http://christianjorgensen.be/masteraaen.php

Her er tabellen jeg lavede:
CREATE TABLE masteraaen(navn VARCHAR(10), tal VARCHAR(20));
INSERT INTO masteraaen VALUES('navn1', '2-25-1-37');
INSERT INTO masteraaen VALUES('navn2', '');
INSERT INTO masteraaen VALUES('navn3', '12-3');
INSERT INTO masteraaen VALUES('navn4', '13');

og koden:
<?php
$result = mysql_query("SELECT * FROM masteraaen")or die(mysql_error());
while($row = mysql_fetch_array($result))
{
  $navn = $row['navn'];
  $tal = $row['tal'];
  $array = explode("-", $tal);
  echo "$navn har vaerdierne: <br>";
  print_r($array);
  echo "<br>";
}
echo "<hr>";

$result = mysql_query("SELECT * FROM masteraaen")or die(mysql_error());
while($row = mysql_fetch_array($result))
{
  $navn = $row['navn'];
  $tal = $row['tal'];
  $array = explode("-", $tal);
  echo "$navn har vaerdierne: <br>";
  foreach($array as $vaerdi) echo "$vaerdi - ";
  echo "<br>";
}
?>

Naar saa det er sagt kan jeg ikke dy mig for at bemaerke at din datastruktur ikke er optimal.  Jeg ved at det var ikke dit spoergsmaal, men jeg ville have lavet to tabeller, en med stamoplysningerne over hvad det nu er der sker handlinger med og en med resultaterne af handlingerne, for eksempel for personer faar points i et spil:

Person
id navn beskrivelse o.s.v.
1  'hans' 'en stor dreng'
2  'rie' 'en lille pige'

Spil
id person points dato
1    2        25    2011-01-23
2    2        12    2011-01-25
3    1        35    2011-01-31
4    2        17    2011-02-17

Naar du saa vil have vaerdierne ud for hans bruger du saadan en forespoergsel

$result = mysql_query("SELECT navn, points FROM Person JOIN Spil ON person.id = spil.person WHERE navn = 'hans'");
27. februar 2011 - 08:37 #2
masteraaen, fik du dette indlaeg?  Jeg er spaendt paa din reaktion.  Var det til hjaelp?  Eller er der yderligere problemer?
Avatar billede masteraaen Novice
27. februar 2011 - 21:47 #3
Hej Christian.

Tak for dit fantastisk værdifulde svar. Efter lidt gøren frem og tilbage, valgte jeg faktisk at lytte til dine kloge ord med at optimere datastrukturen fremfor den metode, jeg ellers beskrev.
Nu har jeg lavet en ny tabel til disse records, og det virker perferkt.

Tusinde tak for det gode svar!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester