Avatar billede hanshenp Nybegynder
23. juli 2003 - 00:39 Der er 23 kommentarer og
1 løsning

Kun udskrive linje 1 gang i for løkke

Jeg sidder og leger med en menu, hvor der er 4 hovedpunkter, som altid skal være der...

Menu1, Menu2, Menu3 og Menu4

Det skal være muligt at oprette uendeligt mange underpunkter til hver overmenu.

Problemet er så, hvordan jeg kan få disse underpunkter udskrevet fra min database (hvori de har underid=1-4), ved kun at bruge en mysql SELECT...

Jeg har tidligere prøvet at løse dette, men der kom alle menu punkterne med for hver løkke, der blev kørt igennem... ikke sætlig smukt :-)
Avatar billede repsac Nybegynder
23. juli 2003 - 00:43 #1
SELECT * FROM tabelnavn WHERE underid = '$underid'
($underid er så enten 1, 2, 3 eler 4)
- eller hvad er det du vil?
Avatar billede ahv Nybegynder
23. juli 2003 - 00:43 #2
Du skal have 2 tabeller, de kunne have flg opbygning ->

HOVEDPUNKTER ->
ID, NAME

UNDERPUNKTER ->
ID, ID_SUB, NAME

Det er sådan set grundideen hvis hvert punkt skal have noget indhold kan et felt der hedder CONTENT f.eks. tilføjes.
Tricket er så at de underpunkter der hører til HOVEDPUNKTET med id 1 bliver sat til at have ID_SUB 1.
Avatar billede hanshenp Nybegynder
23. juli 2003 - 00:47 #3
tænkte bare, at idet at jeg har 4 statiske overpunkter, kunne gøre det uden at jeg skal til at køre en SELECT linje af for hvert overpunkt...
Avatar billede ahv Nybegynder
23. juli 2003 - 00:49 #4
Du bliver skal have Overpunkter og Underpunkter i hver sin tabel, underpunkterne hægter du så samme med et id_sub som forklaret.
Avatar billede repsac Nybegynder
23. juli 2003 - 00:54 #5
ahv: jeg tror du misforstår.

hanshenp: du kan da godt hive det hele ud og efterfølgende vise menu-punkter der hører under den rigtige kategori, men jeg tror det er betydeligt hurtigere at lave et par ekstra SELECT's frem for at fedte med noget php -- desuden så tager det ca. ingen tid at lave en SELECT i forhold til hvor lang tid det tager at oprette forbindelsen til databasen... => lav blot et par ekstra SELECT's og hav god samvittighed :)
Avatar billede hanshenp Nybegynder
23. juli 2003 - 00:56 #6
Så kan jeg jo ligeså godt gøre det på den måde jeg havde fundet frem til inden, hvor jeg kører 4 forespørgsler til den ene tabel jeg har, eftersom jeg ved at undersiderne altid vil have:
underid = 1-4...
Avatar billede erikjacobsen Ekspert
23. juli 2003 - 00:56 #7
SELECT * FROM tabelnavn ORDER BY underid

så kommer punkter til samme punkt lige efter hinanden. Det er i hvert
fald hurtigere end 4 selects *g*
Avatar billede hanshenp Nybegynder
23. juli 2003 - 01:02 #8
det er sådan som jeg gør det nu... laver lige en cut'n'paste af koden...

$menuQ = mysql_query("SELECT id,overskrift FROM site WHERE underid='1' OR underid='2' OR underid='3' OR underid='4' AND user='$user' ORDER BY underid,overskrift");
for($i = 1; $menuR = mysql_fetch_array($menuQ); $i++) {
    if($i == "1") {
        echo "Menu1<br>";
        while($menuR['underid'] == 1) {
            echo "<a href='?id=$menuR[id]'>$menuR[overskrift]</a><br>";
        }
        echo "new<br>";
    }
    elseif($i == "2") {
        echo "Menu2<br>";
        while($menuR['underid'] == 2) {
            echo "<a href='?id=$menuR[id]'>$menuR[overskrift]</a><br>";
        }
        echo "new<br>";
    }
    elseif($i == "3") {
        echo "Menu3<br>";
        while($menuR['underid'] == 3) {
            echo "<a href='?id=$menuR[id]'>$menuR[overskrift]</a><br>";
        }
        echo "new<br>";
    }
    elseif($i == "4") {
        echo "Menu4<br>";
        while($menuR['underid'] == 4) {
            echo "<a href='?id=$menuR[id]'>$menuR[overskrift]</a><br>";
        }
    }
    $i++;
}
Avatar billede repsac Nybegynder
23. juli 2003 - 01:04 #9
erikjacobsen: men mon ikke det er hurtigere at lave fire selects og fire løkker frem for én select og én/fire løkke(r) der så skal kontrollere om undermenu'en nu er "rigtig"?
Avatar billede erikjacobsen Ekspert
23. juli 2003 - 01:05 #10
næh, repsac.
Avatar billede repsac Nybegynder
23. juli 2003 - 01:06 #11
hanshenp: Mjaeh, det er en løsning, men tænk på at hver af "while($menuR-løkkerne" kører igennem _alle_ dataene du har trukket ud af databasen... reelt set trasker du gennem de samme data fire gange for at se om underid'en nu i den ene eller anden omgang er 1, 2, 3 eller 4...
Avatar billede erikjacobsen Ekspert
23. juli 2003 - 01:08 #12
Utestet

$menuQ = mysql_query("SELECT id,overskrift,underid FROM site ORDER BY underid,overskrift");
$gammel=0;
while ($menuR = mysql_fetch_array($menuQ)) {
  if ($gammel!=$menuR['underid']) {
    $gammel=$menuR['underid'];
    print "Menu$gammel<br>";
  }
  print "<a href='?id=$menuR[id]'>$menuR[overskrift]</a><br>";
}
Avatar billede hanshenp Nybegynder
23. juli 2003 - 01:09 #13
nej, for mit uotput er vel optimeret til at 1erne kommer første, og så længe den får 1ere, smider den outputtet under menu1... ellers går den videre til 2,3 eller 4
Avatar billede hanshenp Nybegynder
23. juli 2003 - 01:10 #14
prøver jeg lige erikjacobsen
Avatar billede hanshenp Nybegynder
23. juli 2003 - 01:15 #15
Det var ligepræcis hvad jeg lige stod og manglede...
Mine point går til erik, da det var det svar der virkede...

Svarer du lige en gang :)
Avatar billede hanshenp Nybegynder
23. juli 2003 - 01:15 #16
Hovsa trykkede forkert...

Laver lige et spørgsmål til dine point
Avatar billede erikjacobsen Ekspert
23. juli 2003 - 01:16 #17
nej skidt - det skal du ikke
Avatar billede ahv Nybegynder
23. juli 2003 - 01:16 #18
EJ, skal jeg oprette det med de 60?
Avatar billede erikjacobsen Ekspert
23. juli 2003 - 01:18 #19
nej nej, ingen halløj for et par sølle point. Jeg er godt tilfreds med
at det virker.
Avatar billede hanshenp Nybegynder
23. juli 2003 - 01:18 #20
Nej nej, det er mig ligemeget, du får dem som en tak for hjælpen

Erik, du skal have dine point de ligger her
http://www.eksperten.dk/spm/378865
Avatar billede repsac Nybegynder
23. juli 2003 - 01:18 #21
erikjacobsen: det var dog en satans udmærket løsning, øv. ;)
Avatar billede TRoXa Novice
23. juli 2003 - 01:20 #22
han er også en hacker ;) heheh
Avatar billede erikjacobsen Ekspert
23. juli 2003 - 01:28 #23
Du tager bare de point igen, hans. Over and out ;)
Avatar billede hanshenp Nybegynder
23. juli 2003 - 01:29 #24
oki, takker jer begge, mange gange :)
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