Avatar billede jeffe Nybegynder
18. april 2006 - 12:42 Der er 10 kommentarer

Hvordan virker et array fra MYSQL?

Jeg har hentet en hel tabel ud via mysql_fetch_array og det virker som det skal (dvs. dataene er hentet korrekt).

Jeg kan nu (naturligvis) hente data ved at bruge $row['brugernavn'] eksempelvis. Men der er jo flere  records hentet ud, og med min begrænsede viden om arrays er jeg ikke helt klar over, hvordan det skal tilgås. Jeg kan godt finde ud af at liste dem alle ved at lave en while-løkke omkring recordsettet, men jeg vil gerne bare have dem hentet i et array og derfra kunne tilgå en hvilkensomhelst record ved at skrive "$row['brugernavn'] plus noget mere som angiver hvilken record den skal hente det fra." Dvs. jeg vil slippe for at skulle spole i det, fordi det tager det smarte ud af det.
fungerer et recordset (med flere records) via mysql_fetch_array ikke a la et multidimensionelt array, hvor man så både angiver hvilken records (den ene dimension) og hvilket felt (den anden dimension) man vil have fat i?

Hvordan gør jeg?
Avatar billede showsource Seniormester
18. april 2006 - 12:51 #1
det gi'r ikke helt mening at hente alle, hvis du kun vil bruge nogle specifikke.

Men hvis du nu har en tabel, (brugere), med felterne:

brugernavn, password, dato, alder

$query = mysql_query("SELECT * FROM brugere") or die (mysql_error());

echo mysql_result($query, 0, 2)

for at hente 3. kolonne i row 1, (0)
Avatar billede horsmark Nybegynder
18. april 2006 - 13:02 #2
Showsource, det giver da bestemt mening i mange sammenhænge...

Prøv dette:

$sql    = "SELECT * FROM mytable";
$result = mysql_query($sql) or die( mysql_error() );
$aRows = array();
while (    $row = $this->_oApplication->oDatabase->fetchAssoc($result) ) {
  $aRows[] = $row;
}

print_r($aRows);
Avatar billede jeffe Nybegynder
18. april 2006 - 13:02 #3
Jeg gider ikke lige forklare grunden til at jeg ønsker det. En lidt længere forklaring, men datamængden er beskeden, bare rolig :)

Det virker og er meget tæt på at være hvad jeg ønsker. Der er dog en lille forskel. Jeg ønsker at kunne angive id (dvs. id for den enkelte record) og ikke bare 0 for det først udtrukne, 1 for den næste osv.). Hvis de tre records jeg henter har brugere_id = 4,5 og 6 vil jeg have det sådan at jeg skal angive 4 i stedet for 0 for at fange den første.
Gav det mening. Det er naturligvis fordi det skal scriptes og at tallet skal hentes fra en anden tabel og derfor ikke umiddelbart kan angives via et nummer der er afgjort alt efter hvor mange records der kommer før en given record, i stedet for simpelthen dets id.

Håber du forstår!
Avatar billede horsmark Nybegynder
18. april 2006 - 13:04 #4
sorry blandede lige min egen application databasehandler ind i det :-(

$aRows = array();
$sql    = "SELECT * FROM mytable";
$result = mysql_query($sql) or die( mysql_error() );
while ( $row = mysql_fetch_assoc($result) ) {
  $aRows[] = $row;
}

print_r($aRows);
Avatar billede jeffe Nybegynder
18. april 2006 - 13:05 #5
horsmark: Kan der følge en ganske kort forklaring med. Jeg er ok inde i PHP, men bruger jo altid bare det samme funktioner osv. Jeg kan ikke helt gennemskue din kode der :/
Avatar billede horsmark Nybegynder
18. april 2006 - 13:05 #6
$aUsers = array();
$sql    = "SELECT * FROM mytable";
$result = mysql_query($sql) or die( mysql_error() );
while ( $row = mysql_fetch_assoc($result) ) {
  $aUsers[$row['user_id']] = $row;
}

print_r($aUsers);
Avatar billede horsmark Nybegynder
18. april 2006 - 13:08 #7
yes....

$aUsers = array(); // opret et array så $aUsers[] ikke fejler
$sql    = "SELECT * FROM mytable";
$result = mysql_query($sql) or die( mysql_error() ); //Her sender vi query afsted til db
/* Her looper vi igennem recordsettet der returneres fra mysql indtil der ikke er flere rækker tilbage
*/
while ( $row = mysql_fetch_assoc($result) ) {
  /*Her indsættes en ny entry i arrayet aUsers men den unikke key taget fra brugerens id*/
  $aUsers[$row['user_id']] = $row;
}

/* Udskriver arrayet nicely
og burde skrive det ala dette

[1] => array( ...alle kollonner fra db´en )
[6] => array( ...alle kollonner fra db´en )
*/
print_r($aUsers);


hjalp dette ?
Avatar billede jeffe Nybegynder
18. april 2006 - 13:15 #8
Spiser lige noget mad, så kigger jeg på det, men det ser fint ud :)
Avatar billede jeffe Nybegynder
18. april 2006 - 13:58 #9
Den printer alt ud ganske fint, men hvordan tilgår jeg så, lad os sige, felt 2 (f.eks. brugernavn) i den record med bruger_id = 3?
Avatar billede horsmark Nybegynder
18. april 2006 - 14:03 #10
1. lav en funktion :-)
function getUserDetail($iUserId, $sDetail){
  global $aUsers;
  return isset($aUsers[$iUserId][$sDetail]) ? $aUsers[$iUserId][$sDetail] : null;
}

print "Navnet på brugeren er:".getUserDetail(3, 'brugernavn')." og han bor på ".getUserDetail(3, 'brugeradresse');

2. kald den direkte $aUsers[3]['brugernavn'];
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