Avatar billede Slettet bruger
07. januar 2002 - 22:58 Der er 10 kommentarer og
1 løsning

Omskrive sub-select til MySQL

Hejsa! Jeg ville gerne have nogle råd til hvordan en simpel subselect omskrives til MySQL på korteste og bedste måde.

Den ser således ud:

$sql = \"SELECT * FROM links_kat WHERE ejer_id = $row[id] ORDER BY (SELECT id, count(kat_id) AS antal FROM links_links GROUP BY kat_id ORDER BY antal DESC LIMIT 3)\";

Sagen er at jeg i et linksystem vil have vist de 3 kategorier med flest link i. Og da jeg har lavet den relativ som man bør gøre løber jeg gang på gang panden mod muren ved MySQL\'s manglende sub-select...
Avatar billede erikjacobsen Ekspert
07. januar 2002 - 23:16 #1
Kan du lige give os skemaerne til de to tabeller?
Avatar billede morw Nybegynder
07. januar 2002 - 23:19 #2
SELECT links_kat.*, count(links_links.id) as antal
FROM links_kat
LEFT JOIN links_links on links_links.kat_id = links_kat.id
GROUP BY kat_id
ORDER BY antal DESC LIMIT 3



Avatar billede morw Nybegynder
07. januar 2002 - 23:20 #3
Ja, nu kender vi ikke lige dine felter, så ret lige lidt i det.
Avatar billede Slettet bruger
07. januar 2002 - 23:27 #4
Nåhja:

CREATE TABLE links_kat (
  id int(11) DEFAULT \'0\' NOT NULL auto_increment,
  ejer_id int(11) DEFAULT \'0\' NOT NULL,
  navn varchar(50) NOT NULL,
  PRIMARY KEY (id)
);

og

CREATE TABLE links_links (
  id int(11) DEFAULT \'0\' NOT NULL auto_increment,
  kat_id int(11) DEFAULT \'0\' NOT NULL,
  oprettet timestamp(14),
  opdateret timestamp(14),
  hits int(10) DEFAULT \'0\' NOT NULL,
  sprog varchar(20) NOT NULL,
  navn varchar(100) NOT NULL,
  beskrivelse text NOT NULL,
  url varchar(100) NOT NULL,
  profil_id int(11) DEFAULT \'0\' NOT NULL,
  PRIMARY KEY (id)
);
Avatar billede morw Nybegynder
07. januar 2002 - 23:28 #5
SELECT links_kat.navn, count(links_links.id) as antal
FROM links_kat
LEFT JOIN links_links on links_links.kat_id = links_kat.id
GROUP BY links_kat.id
ORDER BY antal DESC LIMIT 3
Avatar billede erikjacobsen Ekspert
07. januar 2002 - 23:31 #6
og så skal du lige have ejer_id på :)
Avatar billede morw Nybegynder
07. januar 2002 - 23:33 #7
SELECT links_kat.navn, count(links_links.id) as antal
FROM links_kat
LEFT JOIN links_links on links_links.kat_id = links_kat.id
WHERE ejer_id = $row[id]
GROUP BY links_kat.id
ORDER BY antal DESC LIMIT 3

Whoups - havde lige glemt din where-CLAUS ;-D
Avatar billede Slettet bruger
07. januar 2002 - 23:53 #8
burde jeg så ikke kunne udskrive normalt? Jeg får en

Warning: Supplied argument is not a valid MySQL result resource in /net/users/a37/814/divxitdk/www/links.php on line 74

her er noget af scriptet:

if ($kategori) {

$sql = \"SELECT * from links_kat WHERE ejer_id = $kategori ORDER BY navn\";

} else {

$sql = \"SELECT * from links_kat WHERE ejer_id = 0 ORDER BY navn\";

}
$result = mysql_query ($sql);

echo \"<table border=1 width=\\\"100%\\\">\";
while ($row = mysql_fetch_array($result)) {

//$sql = \"SELECT * from links_kat WHERE ejer_id = $row[id] ORDER BY navn LIMIT 0,3\";

$sql = \"SELECT links_kat.navn, count(links_links.id) as antal
FROM links_kat
LEFT JOIN links_links on links_links.kat_id = links_kat.id
WHERE ejer_id = $row[id]
GROUP BY links_kat.id
ORDER BY antal DESC LIMIT 3\";

echo $sql;

$result2 = mysql_query ($sql) or die(mysql_error());


    $tal = $tal + 1;
   
    if ($tal == 1) {
    echo \"<tr><td valign=\\\"top\\\"><a href=\\\"?valg=$valg&kategori=$row[id]\\\">$row[navn]</a><br>\";
   
        while ($myrow = mysql_fetch_array($result2)) {
       
        $sql = \"SELECT * from links_links WHERE kat_id = $myrow[id]\";
        $result3 = mysql_query ($sql);
        $antal = mysql_num_rows ($result3);
       
        echo \"&nbsp;-&nbsp;<a href=\\\"?valg=$valg&kategori=$myrow[id]\\\">$myrow[navn]</a>&nbsp;($antal)\";
        }
Avatar billede Slettet bruger
07. januar 2002 - 23:53 #9
linie 74 er linien med        

$antal = mysql_num_rows ($result3);
Avatar billede Slettet bruger
07. januar 2002 - 23:56 #10
nu fik jeg fundet fejlen..det var bare at lave

SELECT links_kat.navn

om til

SELECT links_kat.*
Avatar billede morw Nybegynder
07. januar 2002 - 23:58 #11
Det var da en hulens masse selects.

Hvis man har brug for at lave selects inde i et while-loop har man som regel ikke lavet det godt nok. Men nu skal jeg i seng - tak for point.
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
Computerworld tilbyder specialiserede kurser i database-management

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