Avatar billede playr Nybegynder
21. december 2003 - 18:40 Der er 27 kommentarer og
1 løsning

Hvordan? (PHP)

Hvordan ser koden ud til at få det her frem?:

http://d2.users.whitehat.dk/php-hjaelp.jpg

- playr
Avatar billede Slettet bruger
21. december 2003 - 18:48 #1
<?PHP
// husk databaseadgang
include("database.inc.php");

// vi henter fra den ene tabel
$sport = mysql_query("SELECT * from sport") or die(mysql_error());
while($row = mysql_fetch_array($sport)) {
  echo " $row[kategori] <br>";
}

// vi henter fra fritid
$fritid = mysql_query("SELECT * from fritid") or die(mysql_error());
while($row = mysql_fetch_array($fritid)) {
  echo " $row[kategori] - $row[overskrift] <br>";
}
?>
Avatar billede eagleeye Praktikant
21. december 2003 - 18:49 #2
Du skal havde en SQL sætning som henter det frem og til det formål kan LEFT JOIN bruges:

select kategori.kategori, nyheder.overskift from kategori left join nyheder on kategori.kategori = nyheder.kategori order by kategori.kategori
Avatar billede playr Nybegynder
21. december 2003 - 18:51 #3
cypermann:
Du tager fejl, sport og fritid ligger begge i tabellen "Kategori"
id = 1
kategori = sport

Sådan ser det ud...

eagleeye, forstår ik hvad du mener !
Avatar billede eagleeye Praktikant
21. december 2003 - 18:53 #4
Den henter alle kategorier samt alle nyher og samler dem sådan de kan udskrrives. Her koden til som kan udskrive det:


$result = mysql_query("select kategori.kategori, nyheder.overskift from kategori left join nyheder on kategori.kategori = nyheder.kategori order by kategori.kategori") or die(mysql_error());
$tkat = "";
while($row = mysql_fetch_array($result)) {
  if ($tkat!=$row[kategori]) {
    $tkat=$row[kategori];
    echo "<b>".$row[kategori]."</b><br>"
  }
  echo " $row[overskrift] <br>";
}
Avatar billede eagleeye Praktikant
21. december 2003 - 18:58 #5
Så den JOIN'er de to tabeller til en ny tabel som man får ud:
kategori  overskrift
Sport    Overskift 1
Sport    Overskrift 2
Sport    Overskrift 3
Sport    Overskrift 4
Privat    Overskrift 1
Privat    Overskrift 2
Privat    Overskrift 3
Avatar billede playr Nybegynder
21. december 2003 - 18:59 #6
Der er fejl på linje 8 ? der mangler " eller noget kan ik se hvad det er for plejer ik programmere som du gør :D
Avatar billede eagleeye Praktikant
21. december 2003 - 19:02 #7
Jeg har glemt et ;  så vidt jeg lige kan se, så prøv sådan her:

$result = mysql_query("select kategori.kategori, nyheder.overskift from kategori left join nyheder on kategori.kategori = nyheder.kategori order by kategori.kategori") or die(mysql_error());
$tkat = "";
while($row = mysql_fetch_array($result)) {
  if ($tkat!=$row[kategori]) {
    $tkat=$row[kategori];
    echo "<b>$row[kategori]</b><br>";
  }
  echo "$row[overskrift] <br>";
}
Avatar billede playr Nybegynder
21. december 2003 - 19:08 #8
hehe nu er problemmet at mine tabels hedder:
x_nyheder og x_kategori
så ved ik lige hvad der er kategori og hvad der er rækker :D
Kan du ik ændre det, for det går ik så godt her :D
Avatar billede eagleeye Praktikant
21. december 2003 - 19:13 #9
Det er bare at rette:
nyheder.overskift --> x_nyheder.overskift
kategori.kategori --> x_kategori.kategori
Det som står først er tabel navnet og det andet er kolonnenavnet:

Prøv denne så:

$result = mysql_query("select x_kategori.kategori, x_nyheder.overskift from x_kategori left join x_nyheder on x_kategori.kategori = x_nyheder.kategori order by x_kategori.kategori") or die(mysql_error());
Avatar billede playr Nybegynder
21. december 2003 - 19:22 #10
Hmm den skriver bare alle kategori'erne ud på en række men overskrifterne kommer ikke frem ? hvorfor ?
Avatar billede playr Nybegynder
21. december 2003 - 19:25 #11
Hvis jeg bytter det her:

    echo "<b>".$row[kategori]."</b><br>";
  }
  echo "<b> ".$row[overskrift]. " <br>";
}
?>

ud med det her:

    echo "<b>".$row[kategori]."</b><br>";
  }
  echo "<b> ".$row[kategori]. " <br>";
}
?>

så skriver den bare kategori'erne 2 gange... Så må det jo betyde at den henter fra den samme tabel hver gang ?... hvis du forstår :D
Avatar billede eagleeye Praktikant
21. december 2003 - 19:25 #12
Det lyder lidt underligt.

Hvad står der i x_nyheder.kategori  ? er det et tal eller tekst?
Avatar billede playr Nybegynder
21. december 2003 - 19:26 #13
Det er et tal... ID'en på det som kategorien har...
Avatar billede eagleeye Praktikant
21. december 2003 - 19:26 #14
Hvis du b ruger
    echo "<b>".$row[kategori]."</b><br>";
  }
  echo "<b> ".$row[kategori]. " <br>";
}

så liste den alle kategorierne.
Avatar billede eagleeye Praktikant
21. december 2003 - 19:27 #15
Ok så prøv lige at rettte SQL'en ;)
Så det er kategori.id de JOIner på..

$result = mysql_query("select x_kategori.kategori, x_nyheder.overskift from x_kategori left join x_nyheder on x_kategori.id = x_nyheder.kategori order by x_kategori.kategori") or die(mysql_error());
Avatar billede eagleeye Praktikant
21. december 2003 - 19:28 #16
men du skal bruge dette:

    echo "<b>".$row[kategori]."</b><br>";
  }
  echo "<b> ".$row[overskrift]. " <br>";
}
?>

Eller skriver den ikke overskrift'erne ud under en kategori.
Avatar billede eagleeye Praktikant
21. december 2003 - 19:29 #17
Jeg er nød til at smutte et par timer. Så jeg håber du kommer vidre med det ;)
Jeg kigger naturligvis ind senere i aften.
Avatar billede playr Nybegynder
21. december 2003 - 19:30 #18
Okay det forstod jeg ik helt :D
Hva skal jeg rette ?
Og det er lidt svært at rette for alle filerne går hen til x_kategori, så hvis jeg skal lave det om til x_kategori.id så går det helt galt...
Avatar billede playr Nybegynder
21. december 2003 - 19:31 #19
Okay øv :D
Men tak ja bare kom senere, og svar på det ;)
Avatar billede fangel Nybegynder
21. december 2003 - 20:23 #20
ca. sådan her ville jeg lave det:

<?php

// sørg selv for mysql-connect

// lav array med kategorier
$query = mysql_query("SELECT id, navn FROM kategori")or die(mysql_error());
$cats = array();
while($data = mysql_fetch_row($query)) $cats[$data[0]] = $data[1];

// lav array med nyhedder
$query2 = mysql_query("SELECT id, overskrift, kategori FROM nyhedder ORDER BY kategori")or die(mysql_error());
$news = array();
while($data2 = mysql_fetch_row($query2)) $news[$data[2]][$data[0]] = $data[1];

// lav pæn menu
foreach($cats AS $cat)
{
  echo "<b>" . $cat . "</b><br>\n";
  foreach($news[$cat] AS $id=>$nyhed) echo $nyhed . " (id: " . $id . ")<br>\n";
  echo "<br>";
}

utestet - og ikke det mest optimale... men jeg elsker arrays ;)

Morten
Avatar billede eagleeye Praktikant
21. december 2003 - 21:56 #21
Du skal ikke lave om på noget i databasen der er bare den SQL sætning jeg har vist. Det er fordi jeg har JOIN de to tabeller forkert så kommer nyhederne ikk  med ud så derfor prøv at rette denne linje:

$result = mysql_query("select x_kategori.kategori, x_nyheder.overskift from x_kategori left join x_nyheder on x_kategori.kategori = x_nyheder.kategori order by x_kategori.kategori") or die(mysql_error());


Til dette, så den JOIN'er på id'et og ikke kategori navnet:

$result = mysql_query("select x_kategori.kategori, x_nyheder.overskift from x_kategori left join x_nyheder on x_kategori.id = x_nyheder.kategori order by x_kategori.kategori") or die(mysql_error());
Avatar billede playr Nybegynder
21. december 2003 - 22:37 #22
dea_pq: Dit virker ik :)

eagleeye:
Det virker ;)
Kan jeg ikke sætte en WHERE ind? altså: WHERE kategori= $_GET[kategori] ?
Avatar billede eagleeye Praktikant
21. december 2003 - 22:41 #23
Ja det kan du bare før order by delen så kan du også sætte tabelnavnet på da kategori er i begge tabeller, where x_kategori.kategori= $_GET[kategori]

Prøv sådan her:

$result = mysql_query("select x_kategori.kategori, x_nyheder.overskift from x_kategori left join x_nyheder on x_kategori.id = x_nyheder.kategori WHERE x_kategori.kategori= '$_GET[kategori]' order by x_kategori.kategori") or die(mysql_error());


Indeholder $_GET[kategori] et tal så skal det være WHERE x_kategori.id= $_GET[kategori]
Avatar billede playr Nybegynder
21. december 2003 - 22:46 #24
Den siger:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by x_kategori.kategori' at line 1
Avatar billede eagleeye Praktikant
21. december 2003 - 22:51 #25
Prøv lige:

$result = mysql_query("select x_kategori.kategori, x_nyheder.overskift from x_kategori left join x_nyheder on x_kategori.id = x_nyheder.kategori WHERE x_kategori.kategori= '".$_GET[kategori]."' order by x_kategori.kategori") or die(mysql_error());


og du sikker på $_GET[kategori] ikke er tom?
Avatar billede playr Nybegynder
21. december 2003 - 22:54 #26
fil.php?kategori=1

Okay nu viser den ingen fejl, men heller ik noget indhold ?
Avatar billede eagleeye Praktikant
21. december 2003 - 22:56 #27
Ok så det tallet så skal det være id kolonnen og ikke kategori kolonnen:

$result = mysql_query("select x_kategori.kategori, x_nyheder.overskift from x_kategori left join x_nyheder on x_kategori.id = x_nyheder.kategori WHERE x_kategori.id= '".$_GET[kategori]."' order by x_kategori.kategori") or die(mysql_error());
Avatar billede playr Nybegynder
21. december 2003 - 23:00 #28
Så kører rouletten :D
Tak skal du have, synes du fortjener alle pointene for det var dig der gjorde hele arbejdet... ;)
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