nej, det kommer jo an på startværdien. $i%4 vil dividere med 4, og så tage restværdien og returnere. Dvs. at hvis du har 4 og en startværdi på 1, bliver restværdien 0 efter 3 gennemløb, men næste gang skal der 4 gennemløb til for at have en rest på 0.
Se her se... det hjalp :) Så skal jeg bare se om jeg kan gøre noget ved alle mine queries... ville helst ikke have så mange hvis jeg kunne undgå det, men burde jeg oprette et nyt spørgsmål med dette?
Ang. dine queries, så er det svært at sige om du kan undvære nogen, når jeg ikke f.eks. kan se din side. Hvis ikke dataene har noget tilfælles, så bliver det nok svært at gøre det enklere...
daniel_d: Uden helt at kunne gennemskue sammenhængen i dine data, vil jeg tro at du ville kunne få glæde af JOINs i dine queries. Jeg vil gerne hjælpe dig, men det kræver at du lige giver en beskrivelse af de data du har i DB'en og en evt. sammenhæng mellem de forskellige tabeller. Og så selvfølgelig en beskrivelse af hvilket resultat vi arbejder hen imod :o)
ok, men i hvert fald virker det vigtigste nu. jeg har føjet dataerne ind i en tabel nu og følgende virker som det skal. Spørgsmålet er så om det kan optimeres, men flytter det gerne til at andet spørgsmål hvis det er...
Denne del: $id = intval( mosGetParam( $_REQUEST, 'id', null ) ); $query = "SELECT catid FROM jos_content WHERE id=$id"; $database->setQuery( $query ); $catid = $database->loadResult();
echo "<tr>"; echo "<td colspan=\"3\"><b>Indholdssider</b></td></tr><tr>"; $query = mysql_query("SELECT * FROM jos_content WHERE catid = $catid ORDER BY title ASC");
Vil jeg mene du kan lave til: $id = intval( mosGetParam( $_REQUEST, 'id', null ) ); echo "<tr>"; echo "<td colspan=\"3\"><b>Indholdssider</b></td></tr><tr>"; $query = mysql_query("SELECT * FROM jos_content WHERE catid = $id ORDER BY title ASC");
Men ellers tror jeg ikke jeg kan se andet at hente umiddelbart - men det er da også 1 query mindre...
Har erstattet mit første query med dit forslag Rednex og det virker også fint.
$query = mysql_query("SELECT jos_categories.id AS catid, jos_categories.title AS cattitle, jos_content.catid, jos_content.id AS contentid, jos_categories.title FROM jos_categories LEFT JOIN jos_content ON (jos_categories.title=jos_content.title)");
Prøv at smide den ind i stedet for din første query. Det er en "rigtig" join.
Jeg har fjernet den ene title (du hev jos_categories.title ud to gange med to forskellige feltnavne).
Det ville altså stadig hjælpe lidt hvis du ville give et praj om hvilke felter de to tabeller indeholder, og hvad de bliver brugt til.
Jeg giver lige mine antagelser, så må du lige rette hvis den er gal: --- jos_content --- id = autoincrement for indhold catid = en reference til en kategori fra jos_categories title = sidens navn/overskrift
--- jos_categories --- id = siger sig selv title = kategoriens navn
OK, nu tror jeg at jeg har forstået problemet og det er jo mindst halvdelen af arbejdet :o)
Din første query skal hente kategorierne, og den anden skal vise indholdssiderne i den valgte kategori. Hvis det er tilfældet, så tror jeg det hele kan gøres en del nemmere/pænere, men du må godt lige bekræfte det inden jeg begynder at "skrue" på koden :o)
Er det overhovedet nødvendigt at sende id (jos_contentid) for at vælge en kategori?
det er korrekt forstået. Og ja, det er nødvendigt at bruge jos_contentid for at vælge en kategori, da det egentlig ikke er en kategori jeg vælger, men en side med samme navn som kategorien og derfor skal jeg bruge dette id.
Jeg har afskaffet dit 2. query igen, da vi alligevel sender catid med i URL'en hver gang. Den første eksempel er standard versionen, hvor jeg har lavet en funktion til at udskrive links'ne. Det var mest for at få noget af alt "fyldet" væk.
Det andet eksempel er en lidt mere ekstrem tilgang til at fjerne duplikeret kode. Jeg vil også skyde på at det er den der performer bedst af de to.
Det første eksempel: <?php $option = $_GET['option']; $task = $_GET['task'];
echo "<table><tr>"; echo "<td colspan=\"3\"><b>Kategorier</b></td></tr><tr>"; $query = mysql_query("SELECT cat.id AS catid, cat.title, con.id AS contentid FROM jos_categories cat LEFT JOIN jos_content con ON (cat.title = con.title) GROUP BY cat.title ORDER BY cat.title");
$catid = intval( mosGetParam( $_REQUEST, 'Itemid', null ) ); $query = mysql_query("SELECT id AS contentid, catid, title FROM jos_content WHERE catid = $catid ORDER BY title ASC");
if ($option=="com_content" && $task=="view") { $catid = intval( mosGetParam( $_REQUEST, 'Itemid', null ) ); $queries = array( 'Kategorier' => 'SELECT cat.id AS catid, cat.title, con.id AS contentid FROM jos_categories cat LEFT JOIN jos_content con ON (cat.title = con.title) GROUP BY cat.title ORDER BY cat.title', 'Indholdssider' => "SELECT id AS contentid, catid, title FROM jos_content WHERE catid = $catid ORDER BY title ASC" );
Jeg opdagede lige en fejl som jeg måtte rette inden sengen kaldte... Hvis der ikke var en content.title som passede med kategorien kom der når man prøvede at hente siderne i den kategori. Nu er kategorierne ikke længere aktive links hvis der ikke er en matchende side i kategorien...
Rednex: Du er da for sej :-) Dit andet eksempel virker jo perfekt :-)
Så smid et svar begge to... Den første får point i dette spørgsmål, og så opretter jeg lige et mere med point til den sidste - det her er super dejligt. Hold da kæft. JUBIII :D
Jamen jeg siger endnu engang tak for hjælpen. Det er jeg sgu glad for.
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.