Avatar billede sesam Nybegynder
10. december 2007 - 17:27 Der er 5 kommentarer og
1 løsning

Land, by, info

Hej eksperter, jeg vil gerne kunne skrive følgende ud på mit website:

Danmark
  Odense
      Ikea
      Adresse 140
      ...
  Randers
      Bilka
      Adresse 78
      ...
Tyskland
  Hamburg
      Bratwurst
      Adresse 10
      ...
  Flensburg
      lala lal 150
      ...
England
  Manchester
      United street 10
      ...
Osv...

Hvordan laver jeg databasen?
Og hvordan henter jeg det ud?
Jeg har forsøgt med en recursiv funktion, men kan ikke rigtigt få det til og hvirke :O(

Takker på forhånd...
Avatar billede j4k0b Nybegynder
10. december 2007 - 17:36 #1
Din database skal nok ligne noget i denne stil:

tblCountries:
    CountryID
    CountryName

tblAffiliates:
    AffiliateID
    CountryID
    Name
    Address
    Zipcode
    City

Rekursive funktioner er til, hvis du f.eks. relaterer to felter i samme tabel, det er ikke tilfældet her. Ovenstående kan trækkes ud med:


SELECT a.AffiliateID, a.Name, a.Address, a.Zipcode, a.City, c.CountryID, c.CountryName
FROM tblAffiliates AS a
INNER JOIN tblCountries AS c
ON a.CountryID = c.CountryID



Hvert række i dit resultat array kommer til at indeholde nøglerne: AffiliateID, Name, Address, Zipcode, City, CountryID og CountryName.

Hvis du ikke er sikker på, om CountryID eksisterer, kan du bruge LEFT JOIN i stedet for INNER JOIN, så får du blot blanke værdier for CountryID og CountryName.


(sql ikke testet)
Avatar billede sesam Nybegynder
10. december 2007 - 21:19 #2
Tak for svar, men jeg får dette resultat:

Danmark
  Odense
      Ikea
      Adresse 140
      ...
Danmark 
  Randers
      Bilka
      Adresse 78

Altså lande navnet bliver skrevet ud hvergang...?
Avatar billede j4k0b Nybegynder
10. december 2007 - 23:12 #3
Du kan prøve noget alá det her nedenfor. Jeg ved ikke om der er en indbygget funktion i PHP til samme formål, jeg har ikke kunne finde den.


<?php

$arr = array(
    array('CountryName' => 'Denmark', 'City' => 'Århus'),
    array('CountryName' => 'Denmark', 'City' => 'Århus'),
    array('CountryName' => 'Denmark', 'City' => 'Århus'),
    array('CountryName' => 'Germany', 'City' => 'Berlin'),
    array('CountryName' => 'Germany', 'City' => 'Berlin'),
);

function sort_by_country($resource) {
    $result = array();
    while($row = array_shift($resource)) {
        $country = $row['CountryName'];
        if(!array_key_exists($country, $result)) {
            $result[$country] = array();
        }
        array_push($result[$country], $row);
    }
    return $result;
}

print_r(sort_by_country($arr));

?>
Avatar billede j4k0b Nybegynder
10. december 2007 - 23:16 #4
JOIN frem for retursive forespørgsler er pga. hastigheden det tager at generer siden. Det kan mærkes som din database vokser.
Avatar billede sesam Nybegynder
16. maj 2008 - 08:17 #5
smid venligst et svar... :O)
Tak for hjælpen...
Avatar billede sesam Nybegynder
09. september 2008 - 09:17 #6
Jeg lukker, når der ikke er nogen der vil ha' point's ;O)
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