Avatar billede RJFreelance Praktikant
23. marts 2008 - 00:59 Der er 11 kommentarer og
1 løsning

Endnu et problem med en mysql where kommando

Hejsa

$result_menu = mysql_query("SELECT cms_side.*, cms_menu.* FROM cms_menu, cms_side WHERE cms_side.aktiv = 'ja' AND cms_menu.link = cms_side.id OR cms_side.type = 'ekstern' ORDER BY cms_menu.placering ASC ") or die(mysql_error()); // Make a query thats gets everything out of

Nogle der kan se hvad der er galt med "OR" delen i denne query?

Fejlen er:

Unknown column 'cms_side.type' in 'where clause'
Avatar billede RJFreelance Praktikant
23. marts 2008 - 01:02 #1
Fandt fejlen, men nu er der et nyt problem...

Den skriver den del der er "ekstern" mange gange. Således at samme ting er taget ud af databasen en del gange..
Avatar billede RJFreelance Praktikant
23. marts 2008 - 01:02 #2
$result_menu = mysql_query("SELECT cms_side.*, cms_menu.* FROM cms_menu, cms_side WHERE cms_side.aktiv = 'ja' AND cms_menu.link = cms_side.id OR cms_menu.type = 'ekstern' ORDER BY cms_menu.placering ASC ") or die(mysql_error()); // Make a query thats gets everything out of
          while ($row_menu = mysql_fetch_array($result_menu)) { // Make a while that throws everything out
          if ($row_menu[type] != 'ekstern') {
           
            echo "<a href=?page=$row_menu[link] target=$row_menu[target]> $row_menu[tekst] </a><br>";
           
        } else {
           
            echo "<a href=$row_menu[link] target=$row_menu[target]> $row_menu[tekst] </a><br>";
             
        }
       
         
          };


Det er koden til det hele hvis det er en hjælp.
Avatar billede coderdk Praktikant
23. marts 2008 - 01:26 #3
"type" er et rigtig dårligt navn til et felt ;) hvis du ikke vil rename, kan du bruge `type` altså med back-ticks...
Avatar billede coderdk Praktikant
23. marts 2008 - 01:33 #4
Du bør også lave din HTML ordentligt, i.e.

echo "<a href=?page=$row_menu[link] target=$row_menu[target]> $row_menu[tekst] </a><br>";

bør være:

echo "<a href=\"?page=$row_menu[link]\" target=\"$row_menu[target]\"> $row_menu[tekst] </a><br>";

Mht. dit problem, prøv at lave din SQL om til:

SELECT s.*, m.* FROM cms_menu AS m INNER JOIN cms_side AS s ON m.link = s.id WHERE s.aktiv = 'ja' OR m.type = 'ekstern' ORDER BY m.placering ASC
Avatar billede RJFreelance Praktikant
23. marts 2008 - 02:10 #5
Det med \" i min html er jeg klar over.. Det kommer også under optimeringen, lige nu er det bare sådan for at gøre det lettere.

Det med type havde jeg slet ikke tænkt over, men det er selvfølgelig sandt..

Mht. selecten, så virker det endnu mindre nu, for nu viser den slet ikke den der er "ekstern"
Avatar billede coderdk Praktikant
23. marts 2008 - 02:57 #6
Hmm ok, så jeg antager at dem der er eksterne, ikke har en record i cms_side?

Det lyder lidt som om at "type" ikke rigtig er nødvendig, så... Helt utestet:

SELECT s.*, m.* FROM cms_menu AS m LEFT OUTER JOIN cms_side AS s ON m.link = s.id AND s.aktiv = 'ja' ORDER BY m.placering ASC

Så vil alle cms_side-felterne være NULL hvis siden er "ekstern", altså ikke har en record i cms_side - Dette er helt utestet, så jeg ved ikke om det lige virker efter hensigten ;)
Avatar billede RJFreelance Praktikant
23. marts 2008 - 15:20 #7
Det virker lidt bedre, men ikke helt.. Problemet er at nu viser den dem selvom at cms_side.aktiv = nej

Jeg prøver lige at skrive på dansk hvad jeg mener, så kan det være det er nemmere:

Hent det hele fra cms_menu hvor at cms_side.id = cms_menu.link OG cms_side.aktiv = ja ELLER hvor cms_side.type=ekstern

Det vil sige at hvis cms_side.type er ekstern, skal den vises i menuen lige meget hvad og hvis cms_side.id er = cms_menu.link og cms_side.aktiv = ja.

Hjælper det? :)
Avatar billede coderdk Praktikant
23. marts 2008 - 18:03 #8
Hmmm det har du de rigtige felter i de rigtige tabeller?

SELECT s.*, m.* FROM cms_menu AS m INNER JOIN cms_side AS s ON m.link = s.id WHERE s.aktiv = 'ja' OR s.type = 'ekstern' ORDER BY m.placering ASC

Altså er type også i cms_side?
Avatar billede RJFreelance Praktikant
23. marts 2008 - 18:35 #9
Det var min fejl, cms_menu.type kan være enten intern eller ekstern..

Ikke cms_side
Avatar billede coderdk Praktikant
23. marts 2008 - 18:56 #10
Select først med inner join mellem de to, og lav en union med dem der er ekstern, læs http://dev.mysql.com/doc/refman/5.0/en/union.html - Begge SELECTs skal have de samme felter, det betyder at i den anden select skal du have de samme felter som i den første. Dette kan du klare med f.eks. SELECT '' AS feltnavn, '' AS andet_felt, cms_menu.*
hvor feltnavn og andet_felt er feltnavnene fra cms_side...
Avatar billede RJFreelance Praktikant
07. oktober 2010 - 12:11 #11
Smid et svar, tak.
Avatar billede coderdk Praktikant
07. oktober 2010 - 12:16 #12
Ok :)
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