Avatar billede christian-s Nybegynder
11. marts 2004 - 21:24 Der er 23 kommentarer og
1 løsning

Udtraek fra 2 tabeller i en MySQL string

Jeg har to tabeller:
menu
submenu

Jeg vil i nedenstaaende string gerne have hentet ALLE menu id's ud men KUN hentet submenu id's der passer til et variabel menu id - og KUN hvis der evt. er et defineret.

$result = mysql_query("SELECT m.*, s.* FROM menu AS m, submenu AS s WHERE m.mid = s.smconnect");

Fra dette faar jeg hentet det ud, men kun menuer med submenuer tilsluttet. Jeg indsnaevrer mig altsaa for meget med "WHERE m.mid = s.smconnect", hvordan faar jeg ogsaa et m.mid ud, der ikke har en s.smconnect?
Avatar billede htm Nybegynder
11. marts 2004 - 21:30 #1
SELECT menu.*, submenu.* FROM menu LEFT JOIN submenu ON menu.mid = submenu.smconnect
Avatar billede christian-s Nybegynder
11. marts 2004 - 21:40 #2
undskyld, jeg fik ikke formuleret mig fuldstaendigt.

kun hvis der er defineret et menuid (mid) skal der soeges for submenu's (smconnect). er dette ikke defineret eller er der ingen submenu's (smconnect) der passer variablen, skal der kun hentes menu's (mid).
Avatar billede htm Nybegynder
11. marts 2004 - 21:52 #3
Hvis der ikke er defineret noget i submenu vil den ikke hente noget ud fra submenu.

Sådan fungerer den sætning der.

LEFT JOIN betyder:
Hiv alle poster fra den venstre tabel. Hvis der er nogen match på den højre tabel hives disse data med ud også.

Læs lidt om de forskellige join typer her: http://www.w3schools.com/sql/sql_join.asp
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:01 #4
Det jeg proever at goere, er, at man klikker paa en menu, og siden reloader - og derefter kommer submenu's under.
Dvs. submenu's skal kun hentes hvor mid'et er defineret som en variabel, det fik jeg ikke gjort klart.

Og tak for linket, det ser ud til at vaere et oplagt bogmaerke!
Avatar billede htm Nybegynder
11. marts 2004 - 22:07 #5
Må indrømme at jeg ikke forstår hvad det er du ønsker, hvis ikke den løsning med left join virker ?
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:18 #6
okay, jeg vil dette eks.:

der er klikket paa forside, og siden reloader med variablen mid=1
-> vis alle menupunkter, men kun submenupunkter til mid=1 (hvis de eksisterer)

derefter klikkes paa profil, og siden reloader med variablen mid=3
-> vis alle menupunkter, men kun submenupunkter til mid=3 (hvis de eksisterer)
Avatar billede htm Nybegynder
11. marts 2004 - 22:26 #7
Ville indrømme det ville være meget nemmere at hive hele menuen ud og bruge en menu som eks. coolmenu fra dhtmlcentral.com - der er det hele severet.

Men har svært ved at se hvordan du ønsker det, Kan sagntes lave en SQL-sætning der hiver et eller andet ud som du vil kunne bruge, men når man ikke ved hvordan din kode ser ud, og opbygningen af din menu, er det lidt svært.

Men igen, overvej at brug en færdig menu som allerede kan dette fint, bonus er at siden ikke behøves at reloades først, før den kan vise submenuen.
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:30 #8
min kode ser saaledes ud - kan du formulere en kode der kun henter submenues fra en foruddefineret mid. du har helt ret, i praksis vil det fungere ganske som en dhtml menu, hvor man klikker og faar submenus's.

            $result = mysql_query("SELECT menu.*, submenu.* FROM menu LEFT JOIN submenu ON menu.mid = submenu.smconnect");
           
            while ($row = mysql_fetch_array($result)) {

                $mid            = $row["mid"];
                $mname            = $row["mname"];
               
                $smid            = $row["smid"];
                $smname            = $row["smname"];

            echo "$mname<br>\n";   
            if ($smid) echo " - $smname<br>\n";           
       
            }
Avatar billede htm Nybegynder
11. marts 2004 - 22:34 #9
Altså hent submenu.smid ud hvor menu.mid = submenu.smconnect og menu.mid er 3 ?

SELECT menu.*, submenu.* FROM menu LEFT JOIN submenu ON menu.mid = submenu.smconnect WHERE menu.mid = 3 ??

$sql = "SELECT menu.*, submenu.* FROM menu LEFT JOIN submenu ON menu.mid = submenu.smconnect WHERE menu.mid=" . $_GET['mid'];
$result = mysql_query($sql);
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:44 #10
ja, nu mangler jeg kun at faa alle menupunkterne, selvom der kun vises submenu's for $mid - det er der jeg har haft problemer

og tak for taalmodigheden!
Avatar billede htm Nybegynder
11. marts 2004 - 22:47 #11
Aaah ok - ja selvfølgelig :-)

Er ikke sikker på dette, men prøv:

SELECT menu.*, submenu.* FROM menu LEFT JOIN submenu ON menu.mid = submenu.smconnect WHERE submenu.smconnect = 3
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:52 #12
ikke helt, det giver samme resultat
Avatar billede htm Nybegynder
11. marts 2004 - 22:52 #13
Tror ikke det virker...

Vil anbefale dig at bruge den første sætning, som henter alt. Herefter bruger du php til at definere hvilken menu der skal vises.

Altså.

if ( $_GET['mid'] == $row['smconnect'] )
{
  //vis submenu
}
else {
  //skjul submenu
}

så er du ligeglad med de andre submenuer du henter ud. Alternativt skal du bruge to sql sætninger
Avatar billede htm Nybegynder
11. marts 2004 - 22:54 #14
eller måske:

SELECT menu.*, submenu.* FROM menu LEFT JOIN submenu ON menu.mid = submenu.smconnect AND menu.mid = 3

Altså uden Where men smide en ekstra betingelse i din join ;-)
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:54 #15
jeg bliver noedt til at loebe, vil teste det senere!
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:55 #16
haha, du fik den - tak!
det var den ekstra join betingelse.
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:56 #17
smid hellere et svar
Avatar billede htm Nybegynder
11. marts 2004 - 22:56 #18
Ja man skal lige fange hvad meningen er, så begynder den at være klar :-)
Avatar billede christian-s Nybegynder
11. marts 2004 - 22:58 #19
jeg vil laese videre paa join, det er vejen!
Avatar billede htm Nybegynder
11. marts 2004 - 22:59 #20
Helt sikkert, det er rart at arbejde med... :-)
Avatar billede christian-s Nybegynder
13. april 2004 - 21:23 #21
htm, jeg har lige opdaget et problem i koden:
SELECT menu.*, submenu.* FROM menu LEFT JOIN submenu ON menu.mid = submenu.smconnect AND menu.mid = 3

hvis der er flere end een submenu, vil menuen blive skrevet til hver submenu.
kan du se hvad jeg mener?
Avatar billede htm Nybegynder
13. april 2004 - 21:36 #22
hmmm nej, kan ikke se hvad du mener :o)
Avatar billede christian-s Nybegynder
13. april 2004 - 21:42 #23
det ser saadan ud:
menu1
- submenu1.1
menu1
- submenu1.2

i stedet for:
menu1
- submenu1.1
- submenu1.2

:)
Avatar billede htm Nybegynder
13. april 2004 - 21:45 #24
Ja ok - det kan jeg godt se. Men det er ikke noget du kan løse vha en select sætning... Der skal du have fat i noget php kode. Desværre ikke noget jeg kan hjælpe dig ret meget med, men du kan kikke på dette spørgsmål jeg har oprettet og se om du kan bruge den løsning... :o)

http://www.eksperten.dk/spm/482699
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