Avatar billede Lanfear Nybegynder
19. marts 2011 - 14:06 Der er 6 kommentarer og
1 løsning

Select og print alt fra database - en ad gangen: PHP MySQL

Jeg skal have printet informationer fra databasen som hver har et field i et table:  name, lastname, phone and email. Dette skal gøres en ad gangen da dataen skal vises under hinanden:

Jeg prøvede nedenstående kode, men dette resulterer i at all navne bliver listed under hinanden, og ikke, som jeg ønsker, rækkefælgen fra top til bund: 1 navn + 1 efternavn, 1telefon, 1email for hver person, og derefter evt i en ny div eller lignende, forfra igen indtil alt fra databasen er printet.

                $query="SELECT * FROM table_references ORDER BY name";
                $result= @mysqli_query($dbc, $query);
                if($result){
                // loop throughthe resultand writeit out
                while($row= mysqli_fetch_array($result, MYSQLI_ASSOC)){
                    echo"<p>" . $row['name'] . " " . $row['last_name'] . "</p>";
                }
                }
                else{
                echo"An errorhappened!".mysqli_error($dbc);
                }
I hope it makes sense and you can help
Avatar billede Slettet bruger
19. marts 2011 - 14:33 #1
F.eks:

$query="SELECT * FROM table_references ORDER BY name";
$result= @mysqli_query($dbc, $query);
if($result)
    {
    echo "<table><tr><td>Fornavn</td><td>Efternavn</td><td>Telefon</td><td>Email</td></tr>";
    while($row= mysqli_fetch_array($result, MYSQLI_ASSOC))
        echo "<tr><td>".$row['name']."</td><td>".$row['last_name']."</td><td>".$row['phone']."</td><td>".$row['email']."</td></tr>";
    echo "</table>";
    }
else
    echo "I made a boo boo: ".mysqli_error($dbc);

Afhængig af hvad telefon og email-felterne hedder
Avatar billede Lanfear Nybegynder
19. marts 2011 - 14:57 #2
Med under hinanden mener jeg som i nedenstående eksempel:

navn:    Marianne Jensen
telefon: 22222222
email:  something@hotmail.com
relation: ven, boss

navn:    Jens Jensen
telefon: 22222266
email:  something2@hotmail.com
relation: ven, familie

Jeg ved dette evt kan gøres via id? Jeg skal nemlig først poste ALLE disse info fra min table, men derefter også gøre det muligt at sortere efter relation. Men det er måske en helt anden issue som ikke behøver integreres her men nærmere i sorteringslinkene?
19. marts 2011 - 16:02 #3
For at liste de data du snakker om i tid oprindelige spoergsmaal vil jeg foreslaa noget i denne retning (ikke testet, men det skulle virke):
$result = mysql_query("SELECT * FROM table_references ORDER BY name");
if($result)
{
  while($row = mysql_fetch_array($result))
  {
    echo "navn: " . $row['name'] . " " . $row['last_name'] . "<br>";
    echo "telefon: " . $row['phone'] . "<br>";
    echo "email: " .$row['email'] . "<br>";
    echo "<br>";
  }
else ....error...

Saa kommer du med noget nyt i $2, relation.  Jeg forstaar at hver person kan have flere relations.  Hvor gemmer du oplysninger om relations?  Jeg haaber du har det i en saerskilt tabel for relations med (mindst) to kolonner, person og relation.  Saa skal du ogsaa bruge et felt id i table_reference.  Hvis saa personen med id = 7 er ven, boss, og vinduespudser, saa giver det tre raekker i relations: 7 ven, 7 boss, og 7 vinduespudser.  Saa bliver din kode udvidet til (ikke testet):

$result = mysql_query("SELECT * FROM table_references ORDER BY name");
if($result)
{
  while($row = mysql_fetch_array($result))
  {
    echo "navn: " . $row['name'] . " " . $row['last_name'] . "<br>";
    echo "telefon: " . $row['phone'] . "<br>";
    echo "email: " .$row['email'] . "<br>";
    echo "relation: "
    $id = $row['id'];
    $result2 = mysql_query(SELECT relation FROM relations WHERE personid = '$id');
    while($row2 = mysql_fetch_array($result2))
    {
      echo $row['relation'] . " ";
    }
    echo "<br><br>";

  }
else ....error...
Avatar billede Slettet bruger
19. marts 2011 - 17:11 #4
Hvis de bare skal kunne sorteres på skærmen kan du bruge en sorttable:
http://www.kryogenix.org/code/browser/sorttable/
Avatar billede Lanfear Nybegynder
20. marts 2011 - 13:53 #5
Tak. Den første kode del virker perfekt!

Er ikke helt sikker på om min opdeling lever op til følgende krav, men kan vise dig mine tables i følgende SQL kode:

CREATE TABLE table_references(
ref_id INT(4) NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
last_name VARCHAR(150) NOT NULL,
address VARCHAR(255),
zip INT(4) NOT NULL,
email VARCHAR(150),
phone INT(20),
description TEXT NOT NULL,
PRIMARY KEY (ref_id),
FOREIGN KEY (zip) references table_zip_info(zip)
);


CREATE TABLE table_zip_info(
zip INT(4) NOT NULL,
town varchar(150),
PRIMARY KEY (zip)
);


CREATE TABLE table_relations(
rel_id INT(4) NOT NULL,
ref_id INT(4) NOT NULL,
rel_date DATE,
FOREIGN KEY (rel_id) references table_rel_info(rel_id),
FOREIGN KEY (ref_id) references table_references(ref_id),
PRIMARY KEY (rel_id, ref_id)
);


CREATE TABLE table_rel_info(
rel_id INT(4) NOT NULL AUTO_INCREMENT,
relation VARCHAR(50),
PRIMARY KEY (rel_id)
);
Avatar billede Lanfear Nybegynder
20. marts 2011 - 15:32 #6
Vil det være muligt at bruge NATURAL JOIN på en måde så siden starter ud med at vise alle referencer men links gør det muligt på samme side kun at vise referencer med et bestemt relationsid?
20. marts 2011 - 21:16 #7
Var det til mig du sagde at den foerste kode del virker perfekt?  I saa fald, det var godt.

Baseret paa de tabeller du viser skulle du kunne faa navn, telefon, email, og en liste af relationer vist med denne kode:

$result = mysql_query("SELECT * FROM table_references ORDER BY name");
if($result)
{
  while($row = mysql_fetch_array($result))
  {
    echo "navn: " . $row['name'] . " " . $row['last_name'] . "<br>";
    echo "telefon: " . $row['phone'] . "<br>";
    echo "email: " .$row['email'] . "<br>";
    echo "relation: "
    $id = $row['ref_id'];
    $result2 = mysql_query("SELECT relation FROM table_rel_info JOIN table_relations ON table_rel_info.rel_id = table_relations.rel_id WHERE table_relations.ref_id = $id");
    while($row2 = mysql_fetch_array($result2))
    {
      echo $row['relation'] . " ";
    }
    echo "<br><br>";
  }
else ....error...

Jeg opretter dette som svar idet jeg mener at jeg nu har hjulpet med dit spoergsmaal.  Hvis du er enig, saa skal du acceptere mit svar ved at saette et 'flueben' i firkanten ved 'Accepter dette svar' og derefter klikke paa feltet "Accepter svar og afgiv points.'  Derved afgiver du de lovede points og lukker spoergsmaalet.

Du opstiller saa, i #6, et nyt problem som jeg ikke er sikker paa at jeg forstaar, noget med alle referencer og derefter links til visse referencer.  Men det boer du oprette et nyt spoergsmaal for.  Saa faar vi dette her afsluttet i god orden, og saa faar du opmaerksomhed paa dit nye problem fra alle Ekspertens medlemmer af hvilke nogle maaske er klogere end jeg.
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
Computerworld tilbyder specialiserede kurser i database-management

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