Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


SQL - ORDER BY för dropmeny

Postades av 2005-04-07 21:31:43 - Adrian McCool, i forum mysq, Tråden har 11 Kommentarer och lästs av 1209 personer

Tjena!

Håller på att fixa lite med ett menysystem i PHP och MySql. Men har fått lite problem
med SQLen. Jag kan inte få ut ordningen rätt, har försökt med GROUP BY och HAVING
men kan inte få det att funka...
Så här ser min tabell ut

MenuID MenuName MenuOrder MenuParentID
1 Button 1 0 1
2 Button 2 1 2
3 Button 3 2 3
4 Sub button 1 0 1
5 Sub button 1 0 3
6 Sub button 1 0 4


Med denna uppställning så skulle jag enkelt vilja loopa ut det så här:

Button 1
Sub button 1
Sub button 1
Button 2
Button 3
Sub button 1


Vore väldigt tacksam ifall någon kunde hjälpa mig. Har suttit
ett tag nu och är helt knäckt...

Mvh
Adde


Svara

Sv: SQL - ORDER BY för dropmeny

Postades av 2005-04-07 22:14:11 - Johan Djupmarker

Det går inte, eller rättare sagt, jag har försökt flera gånger utan att komma på en bra lösning, men det är ju ingen garanti :) På rak arm kan jag komma på två mer eller mindre fula lösningar.

1. En rekursiv funktion som först hämtar alla toppalternativ. För varje toppnivå frågar du sedan databasen efter alla child-noder, för varje child-nod hämtar du alla dess childs osv... Kräver många databasfrågor vid en stor meny...=/

2.Om man lägger till ett fält i databasen där man anger "utskriftsordningen" uppifrån och ner kan man lätt skriva ut hela menyn. I ditt fall.

1 Button 1
2 Sub button 1
3 Sub button 1
4 Button 2
5 Button 3
6 Sub button 1

/Johan


Svara

Sv:SQL - ORDER BY för dropmeny

Postades av 2005-04-07 22:57:55 - Adrian McCool

Tjena!

Och tack för att du svara!

Trodde inte jag skulle få svar så här sent...
Är rätt komplicerat fast upplägget är ganska basic.

Min meny ska vara oändlig i hierkier. Så den rekursiva versionen skulle inte funka. Om jag
förstår dig rätt. Har gjort någon sådan förut men aldrig en som kan ha hur många steg som
helst..hehe har dock försökt.

Jag har ett order fält men det löser tyvärr inte mitt problem. Jag kommer att loopa
ut den som en DHTML meny med lager och sånt så då blir det lite rörigare..
Man ska kunna ordna en meny instans upp och ner i dess ordning.
Oj vad rörigt det blev.

Alltså såhär:

1_1 (0)
1_1_1 (0)
1_1_2 (1)
1_1_2_1 (0)
1_1_3 (2)
1_2 (1)
1_2_1 (0)

Hehe lite rörigt...alltså varje undermeny som fälls ut kan man ordna
varje knapp under just den menyn.


Jag har försökt med följande:
SELECT * FROM Menu GROUP BY MenuID HAVING MenuParentID=MenuID

Men det funka inte, vore ioförsig enkelt om den funka så...


Såg att jag gjort lite fel i min första fråga.
Här är ett annat rätt exempel:


MenuID MenuName MenuOrder MenuParentID
1 Button1 0 1
2 Sub Button1 0 1
3 Sub Button2 1 1
4 Sub Button1 0 3
5 Button2 0 4
6 Sub Button1 0 5


Svara

Sv: SQL - ORDER BY för dropmeny

Postades av 2005-04-08 08:12:06 - Mikael Wedham

<Min meny ska vara oändlig i hierkier. Så den rekursiva versionen skulle inte funka. Om jag
<förstår dig rätt. Har gjort någon sådan förut men aldrig en som kan ha hur många steg som
<helst..hehe har dock försökt.

Både rätt och fel...

SQL Server kan bara rekursivisera i 32 nivåer, men du kan ju göra en rekursiv funktion i klienten, bara dit resultat är lämpligt för det.

/micke


Svara

Sv:SQL - ORDER BY för dropmeny

Postades av 2005-04-08 09:20:05 - Adrian McCool

Hur menar du med att göra en rekursiv funktion i klienten?

Just nu ser min fråga ut så här:

SELECT E.*
FROM Menu E LEFT OUTER JOIN Menu M
ON E.MenuParentID = M.MenuID
ORDER BY E.MenuOrder, M.MenuParentID

Den genererar nästan rätt! Dvs:

MenuID MenuParentID MenuOrder MenuName
1 1 0 Button 1
5 1 0 Sub button 1_1
7 5 0 Sub button 1_1_1
6 1 1 Sub button 1_2
8 5 1 Sub button 1_1_2
2 2 1 Button 2

Som du ser så skulle jag vilja att Sub button 1_1_2
hamnar under Sub button 1_1_1 så den kommer rätt i hierkin.
MenuID och MenuParentID skulle då genereras på följande sätt:

1 1
5 1
7 5
8 5
6 1

Vilket den inte gör med denna fråga.
Men ifall den här typen av frågor endast
kan ta 32 nivåer så blir det ju ändå inte som jag vill ha det. Fast det duger med 32 nivåer.
Hehe...vore konstigt ifall man vill ha mer?
Känns faktiskt som om det blir att köra massor med kod i PHP istället.
Ville helst undvika det då det kan bli rätt komplicerat.
Tycker det är märkligt att inga har lyckat göra en sådan fråga, kanske
helt enkelt inte går...

Hoppas du kan hjälpa mig! :)


Svara

Sv: SQL - ORDER BY för dropmeny

Postades av 2005-04-08 09:42:15 - Per-Erik Modig

som sagt tidigare så är det nog svårt att göra direkt i databasen. Själv har jag gjort den lösningen genom en rekursiv funktion i PHP som hämtar först alla root-noder och sen för varje nod hämtar dess barn osv.

Jag har funderat på om det skulle gå att läsa ner allt direkt och stoppa in i en array eller klasser och sen sortera det på det viset, men har ännu inte kommit längre än funderingar...

/P-E


Svara

Sv:SQL - ORDER BY för dropmeny

Postades av 2005-04-08 09:55:23 - Per Persson

Inte bara svårt. Det är omöjligt att göra det direkt i databasen. En rekursiv funktion krävs.

Känner man igen toppalternativen genom att deras MenuParentID är samma som deras egna MenuID? Får jag föreslå att du sätter MenuParentID till 0 i stället på dessa? Då kan du köra med

function skriv_meny($parentID = 0)
{
    $sql = "SELECT MenuID, MenuName FROM Menu WHERE MenuParentID = $parentID ORDER BY MenuOrder ASC";
    $res = mysql_query($sql) or die(mysql_error() . '<br>' . $sql);
    if(mysql_num_rows($res) > 0) {
        echo '<ul>';
        while($rad = mysql_fetch_assoc($res)) {
            echo '<li>', $rad['MenuName'];
            skriv_meny($rad['MenuID']);
            echo '</li>';
        }
        echo '</ul>';
    }
}


För övrigt rekommenderas PHPportalen (http://www.phpportalen.net) för PHP- och MySQL-relaterade frågor.


Svara

Sv: SQL - ORDER BY för dropmeny

Postades av 2005-04-08 10:09:47 - Mikael Wedham

Hur blir det om du kör:

SELECT E.*
FROM Menu E LEFT OUTER JOIN Menu M
ON E.MenuParentID = M.MenuID
ORDER BY M.MenuParentID, E.MenuOrder

/micke


Svara

Sv:SQL - ORDER BY för dropmeny

Postades av 2005-04-08 10:24:15 - Adrian McCool

"Jag har funderat på om det skulle gå att läsa ner allt direkt och stoppa in i en array eller klasser och sen sortera det på det viset, men har ännu inte kommit längre än funderingar... "

Jo jag har tänkt på ifall man skulle sortera allt i PHP istället. Men det känns jobbigt :)
Fast det kanske inte finns några andra alternativ just nu i MySQL...


Svara

Sv:SQL - ORDER BY för dropmeny

Postades av 2005-04-08 10:26:53 - Adrian McCool

När jag kör:

SELECT E.*
FROM Menu E LEFT OUTER JOIN Menu M
ON E.MenuParentID = M.MenuID
ORDER BY M.MenuParentID, E.MenuOrder

Tyvärr så blir det inte rätt.

5 1
7 5
1 1
8 5


Svara

Sv: SQL - ORDER BY för dropmeny

Postades av 2005-04-08 10:29:48 - Adrian McCool

Ok tack då fick jag svar på att det var helt omöjligt...kändes som jag ville höra det.
Då ger jag upp med databasen for now. Och fokuserar på PHP istället!
Tack så jättemycket för alla grymma svar!


Svara

Sv:SQL - ORDER BY för dropmeny

Postades av 2005-04-08 11:44:53 - Adrian McCool

Okej nu är problemet löst, den är oändlig tack Per för den enkla men smarta funktionen.
Enklast är alltid svårast. :)

Så här vart det:

MYSQL
Tabell i rätt ordning från början, men skulle kunna se ur hur som helst i ordning.

MenuID MenuParentID MenuOrder MenuName
1 0 0 Button 1
5 1 0 Sub button 1_1
7 5 0 Sub button 1_1_1
8 5 1 Sub button 1_1_2
6 1 1 Sub button 1_2
2 0 1 Button 2


PHP
function CreateMenu($parentID=0)
{
$sql = "SELECT * FROM Menu WHERE MenuParentID = $parentID ORDER BY MenuOrder ASC";
$res = mysql_query($sql) or die(mysql_error() . '<br>' . $sql);
if(mysql_num_rows($res) > 0) {
while($rad = mysql_fetch_assoc($res)) {
$hasparent = mysql_query("SELECT MenuParentID FROM Menu WHERE MenuParentID = ".$rad['MenuID']);
if ($hasparent){
echo $rad['MenuName']."<br>";
CreateMenu($rad['MenuID']);
}else{
echo $rad['MenuName']."<br>";
}
}
}
}


Resultatet skulle bli med lite html för att skjuta ut subbarna:

Button 1
Sub button 1_1
Sub button 1_1_1
Sub button 1_1_2
Sub button 1_2
Button 2


Bra för alla er som vill göra en oändlig meny struktur eller liknande.
Nu blir det massor med DHTML..hehe
Happy! :)


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 154
27 952
271 704
681
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies