07. januar 2002 - 22:58Der 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...
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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
Ja, nu kender vi ikke lige dine felter, så ret lige lidt i det.
Synes godt om
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) );
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
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
Synes godt om
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);
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.
Synes godt om
Ny brugerNybegynder
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.