04. juli 2005 - 00:08Der er
11 kommentarer og 2 løsninger
Links i flere kategorier
Det er meningen at i min linksystem skal man kunne have et link der vises i flere kategorier, jeg har prøvet med følgende, men det virker ikke rigtigt..
$r = mysql_query("SELECT * FROM links WHERE kategori, kategori2, kategori3 = '$kategori' order by id DESC LIMIT $offset,$pr_side"); $w = mysql_query("SELECT * FROM links WHERE kategori, kategori2, kategori3 = '$kategori' order by overskrift ASC LIMIT $offset,$pr_side"); $antal = mysql_query("select COUNT(*) AS total from links where kategori = '$kategori'");
$r = mysql_query("SELECT * FROM links WHERE kategori = '$kategori' order by id DESC LIMIT $offset,$pr_side"); $w = mysql_query("SELECT * FROM links WHERE kategori= '$kategori' order by overskrift ASC LIMIT $offset,$pr_side"); $antal = mysql_query("select COUNT(*) AS total from links where kategori = '$kategori'");
Hvis jeg forstår dit spørgsmål korrekt, ville jeg prøve:
$r = mysql_query("SELECT * FROM links WHERE kategori = '$kategori' OR kategori2 = '$kategori' OR kategori3 = '$kategori' ORDER BY id DESC LIMIT $offset, $pr_side");
Okay, det her hører godt nok til under MySQL, men vi kan da godt skrive. Det du har, er en masse-til-masse relation, så du har brug for 3 tabeller: kategorier, links, join De indeholder som minimum felterne: 'kategorier': kategori_id og kategori (liste over kategorierne) 'links': link_id, link (liste over links) 'join': kategori_id, link_id (tabellen der binder kategorierne og linksene sammen)
Felterne i 'join' er referencer til de rigtige felter, og indeholder derfor kun det unikke nummer.
For at hente alle linksene som hører under en bestemt kategori_id, skal du bruge en join: SELECT links.link, links.link_id FROM (kategori INNER JOIN [join] ON kategori.kategori_id = join.kategori_id) INNER JOIN links ON join.link_id = links.link_id WHERE (((join.kategori_id)=3)) ORDER BY links.link;
SQL-sætningen er godt nok taget fra Access, så den skal muligvis tilpasses lidt. Men det er bare for at give den overordnede idé om, hvordan den skal ordnes. Tilsvarende for at hente antallet, er den meget let: SELECT count(*) as total FROM 'join' WHERE kategori_id = 5;
altså formålet er at hvis en bruger fx har et link der relatere sig til kategorien computerspil men samtidig onlineshopping og underholdning, så skal linket kunne blive vist i alle 3 kategorier og hver kategori har hvert sit ID nummer, derfor når en bruger tilføjer et link der passer ind i 3 kategorier så får databasen 3 kategori ID numre.. Derfor er der både kategori, kategori2 og kategori3..
$r = mysql_query("SELECT * FROM links WHERE kategori AND kategori2 AND kategori3 = '$kategori' order by id DESC LIMIT $offset,$pr_side"); $w = mysql_query("SELECT * FROM links WHERE kategori AND kategori2 AND kategori3 = '$kategori' order by overskrift ASC LIMIT $offset,$pr_side");
Og så har jeg lagt et link ind med kategori 1,2 og 3..
I kategori 1 skriver den bare antallet af links uden at vise dem, i kategori 2 skriver den ingenting og i kategori 3 udskriver den linket, men skriver at der er 0 links :S
Mit forslag tager højde for, at hver link kan have n antal kategorier. Men for at svare dit oprindelige spørgsmål, så kan jeg se problemet. Din oprindelige SQL: "SELECT * FROM links WHERE kategori, kategori2, kategori3 = '$kategori' ORDER BY (...)" Det er din WHERE-stykke der giver problemer. Desværre er MySQL ikke smart nok til at genkende hvad du vil, så du bliver nødt til at skære det ud i pap. Syntaxen for WHERE er: felt = værdi[ AND/OR felt2 = værdi2[ AND/OR felt3 = værdi3[ AND/OR ...]]]] Hvis vi indsætter dine værdier, ser det således ud: WHERE kategori1, kategori2, kategori3 = værdi. Du mangler altså at redegøre for kategori1 og kategori2, og sammenhængen derimellem.
Løsning: WHERE kategori1 = '$kategori' OR kategori2 = '$kategori' OR kategori3 = '$kategori'
Hmmm, nu er det sommer og dejligt vejr, så sur gider jeg absolut ikke være... Men er det accepterede svar ikke præcis det samme, som mit første forslag??? :)
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.