LoS Skrevet 2. mai 2004 Del Skrevet 2. mai 2004 Heisann, veit dette i teorien ikke går under php, men jeg må jo i tillegg ha hjelp til å hente det ut Til poenget. Har en kode som ser slik ut nå *klippe klippe* $q=$sql->query("SELECT * FROM nyheter ORDER BY id DESC LIMIT 0, 10"); echo '<div id="innhold">'; while($rad=$sql->fetch($q)) { $id=$rad['id']; $q3=$sql->query("SELECT COUNT(*) FROM kommentarer WHERE nid=$id"); $kommentarer=$sql->result($q3); Dette funker jo foreløbig bra, men jeg vil jo selvfølgelig lære å få så få queries som mulig, da jeg liker å lære, samt at ting går fortere har vel aldri vært ett minus Kikka litt på join osv, men skjønte så lite :/ Takker for all hjelp! Lenke til kommentar
???????? Skrevet 3. mai 2004 Del Skrevet 3. mai 2004 Du er inne på rett tema, join. SQL er et eget programmeringsspråk og det finnes mange bøker om dette. Mange kjøper en bok om PHP og mysql og tror da at de kan SQL. De fleste har sikkert lært en del SQL da, men de fleste php bøkene viser kun enkle spørringer. For å løse ditt "problem" kan du bruke LEFT JOIN, f.eks.: SELECT felt1, felt2, COUNT(felt) FROM nyheter LEFT JOIN kommentarer ON nyheter.id = kommentarer.nid GROUP BY kommentarer.nid ORDER BY id DESC LIMIT 0,10 Etter hvert når du begynner å utvikle mer avanserte script vil du fort oppdage hvor viktig SQL er. Start med en bok som SQL for dummies - den boken er faktisk bra! Lenke til kommentar
LoS Skrevet 3. mai 2004 Forfatter Del Skrevet 3. mai 2004 Takker så mye for svar. skal se hva jeg får ut av querien din. Ser at denne "SQL for dummies" boka har kommet i flere versjoner, (editions). Er det bare å velge den siste da eller går bøkene fra 1 og oppover? Slik at jeg må lese den første versjonen av boka og lese meg oppover til den siste? Tror SQL for dummies passer meg bra, ligger i tittelen Lenke til kommentar
???????? Skrevet 3. mai 2004 Del Skrevet 3. mai 2004 Velg siste utgave. Boken gir deg en oversikt over noen funksjoner som er veldig nyttige. Lenke til kommentar
Cucum(r) Skrevet 3. mai 2004 Del Skrevet 3. mai 2004 Får man kjøpt noen PHP / SQL - bøker i norge? Lenke til kommentar
LoS Skrevet 3. mai 2004 Forfatter Del Skrevet 3. mai 2004 (endret) Ok, takker! Har ett lite problem akkurat nå, men jeg skal prøve litt til, kan hende jeg redigerer denne posten når jeg står fast edit: SirIce: tror du får kjøpt ett fåtall i norge, må kanskje i store butikker for å få tak i dem. en venn av meg kjøpte en utrolig god bok jeg låner, men veit ikke om han kjøpte den i norge. Den er ihvertfall utrolig lett å lære av! Heter forøvrig "PHP for the world wide web - by larry ullman" Men jeg tror nesten at man må få tak i en ren sql bok for å lære sql på den måten jeg driver å lærer nå :/ Endret 3. mai 2004 av LoS Lenke til kommentar
???????? Skrevet 3. mai 2004 Del Skrevet 3. mai 2004 amazon er et bra sted for å kjøpe bøker. Hvis du vil kjøpe de i norge er det litt avhengig av hvor du bor. Bor du i Oslo så finnes det mange butikker som bare har pc bøker, som datajungelen. De fleste bokhandlere kan skaffe en et bra utvalg av bøker, men det er som regel en del billigere å bestille de fra amazon (glem ikke at det ikke er mva. på bøker du importerer) Lenke til kommentar
LoS Skrevet 3. mai 2004 Forfatter Del Skrevet 3. mai 2004 (endret) Greit, jeg finner ikke svaret på problemet mitt. Nå har jeg gjort det slik: $q=$sql->query("SELECT nyheter.*, COUNT(nid) FROM nyheter LEFT JOIN kommentarer ON nyheter.id = kommentarer.nid GROUP BY kommentarer.nid ORDER BY nyheter.id DESC LIMIT 0,10"); echo '<div id="innhold">'; if ($rad=$sql->fetch($q) AND $kommentarer=$sql->result($q)){ do { echo '<div class="nyhetsramme"><h2>' .$rad['overskrift'] .'</h2><div class="nyhet"><p class="nyhet">' .$rad['ingress'] .'</p></div><p class="tid">'; if (!empty($rad['nyhet'])) { echo '<a href="index.php?op=mer&id='.$rad['id'].'">Les mer...</a> | '; } if ($_SESSION['id']){ echo '<a href="index.php?op=rediger&id='.$rad['id'].'">Rediger</a> | <a href="index.php?op=slett&id='.$rad['id'].'">Slett</a> | '; } echo '<a href="index.php?op=mer&id='.$rad['id'].'">'.$kommentarer.' kommentar'; if($kommentarer != "1"){ echo "er";}echo '</a> | '.$tid->dato($rad['tid']) .'</p></div><br /><br />'; } while($rad=$sql->fetch($q)); } echo '</div>'; Sorry for at det er litt å pløye igjennom. Problemet er bare det at jeg har 5 nyheter, 3 av disse kommer fram, jeg har til sammen 3 kommentarer, der teller den til 7 på hver nyhet, hva gjør jeg feil? Takker for alle inspill, blir nok bedre når jeg får tak i en bok å lese edit:veit koden er litt rar, men den er ikke ferdig enda, og php programmet mitt ville tydeligvis ikke kopiere skikkelig ut, så koden ser ut som ett h.... Endret 3. mai 2004 av LoS Lenke til kommentar
sven-o Skrevet 4. mai 2004 Del Skrevet 4. mai 2004 Greit, jeg finner ikke svaret på problemet mitt.Nå har jeg gjort det slik: $q=$sql->query("SELECT nyheter.*, COUNT(nid) FROM nyheter LEFT JOIN kommentarer ON nyheter.id = kommentarer.nid GROUP BY kommentarer.nid ORDER BY nyheter.id DESC LIMIT 0,10"); echo '<div id="innhold">'; if ($rad=$sql->fetch($q) AND $kommentarer=$sql->result($q)){ do { echo '<div class="nyhetsramme"><h2>' .$rad['overskrift'] .'</h2><div class="nyhet"><p class="nyhet">' .$rad['ingress'] .'</p></div><p class="tid">'; if (!empty($rad['nyhet'])) { echo '<a href="index.php?op=mer&id='.$rad['id'].'">Les mer...</a> | '; } if ($_SESSION['id']){ echo '<a href="index.php?op=rediger&id='.$rad['id'].'">Rediger</a> | <a href="index.php?op=slett&id='.$rad['id'].'">Slett</a> | '; } echo '<a href="index.php?op=mer&id='.$rad['id'].'">'.$kommentarer.' kommentar'; if($kommentarer != "1"){ echo "er";}echo '</a> | '.$tid->dato($rad['tid']) .'</p></div><br /><br />'; } while($rad=$sql->fetch($q)); } echo '</div>'; Sorry for at det er litt å pløye igjennom. Problemet er bare det at jeg har 5 nyheter, 3 av disse kommer fram, jeg har til sammen 3 kommentarer, der teller den til 7 på hver nyhet, hva gjør jeg feil? Takker for alle inspill, blir nok bedre når jeg får tak i en bok å lese edit:veit koden er litt rar, men den er ikke ferdig enda, og php programmet mitt ville tydeligvis ikke kopiere skikkelig ut, så koden ser ut som ett h.... Du må bruke OUTER JOIN (left eller right, husker ikke). Ellers vil ikke nyhetene uten kommentarer komme med i datasettet. Lenke til kommentar
LoS Skrevet 4. mai 2004 Forfatter Del Skrevet 4. mai 2004 Glemte kanskje å ta med en litt viktig detalj her. De tre nyhtene jeg får fram, der har den ene 0 kommentarer, den andre har 1 kommentar, og den siste har 2 kommentarer. Når jeg brukt OUTER JOIN så fikk jeg bare fram de som hadde kommentarer. Lenke til kommentar
sven-o Skrevet 4. mai 2004 Del Skrevet 4. mai 2004 Glemte kanskje å ta med en litt viktig detalj her.De tre nyhtene jeg får fram, der har den ene 0 kommentarer, den andre har 1 kommentar, og den siste har 2 kommentarer. Når jeg brukt OUTER JOIN så fikk jeg bare fram de som hadde kommentarer. Heh... Jeg leste ikke hva som var problemet, og antok noe helt annet... Hva er felles for de nyhetene som ikke kommer frem da? Er det noe mønster her? Lenke til kommentar
LoS Skrevet 4. mai 2004 Forfatter Del Skrevet 4. mai 2004 (endret) Bilder sier mer enn 1000 ord? Legger ut bilder her jeg. Nyhetene som kommer fram kan dere se her Ble en del url greier her nå, bedre enn at jeg skal forklare så råttent som jeg ofte gjør edit: og nei, jeg finner ikke noe mønster her, så det blir litt lite å gå på for meg. Endret 4. mai 2004 av LoS Lenke til kommentar
sven-o Skrevet 4. mai 2004 Del Skrevet 4. mai 2004 Vet ikke hvorfor du bare får 3 rader. Får å få riktig antall kan du sette navn på kolonnen count(nid). Endre den til count(nid) AS antall, så kan du hente ut antall kommentarer pr. nyhet fra $rad['antall']. Lenke til kommentar
LoS Skrevet 4. mai 2004 Forfatter Del Skrevet 4. mai 2004 Takker for den der, da funker kommentar sakene skikkelig ihvertfall Bare å få alle nyhetene til å vises nå da. Lenke til kommentar
???????? Skrevet 4. mai 2004 Del Skrevet 4. mai 2004 (endret) Det første du burde gjøre er å passe på at feltene er av samme type, nid er varchar og nyheter.id er int. Du burde bruke left join. Pass på at du setter ON korrekt og tenk litt på group by - slik at du grupperer rett felt. Det ser ut som spørringen skal fungere hvis du retter feltet - hvis ikke kan jeg ta en kikk på tabellene dine Test alltid spørringer direkte mot sql og ikke i php, for å utelukke feil i php koder. Edit: du burde også legge til tabellnavnet i denne "COUNT(nid)" blir litt å lese koden. Eventuelt bruke AS Endret 4. mai 2004 av ???????? Lenke til kommentar
LoS Skrevet 4. mai 2004 Forfatter Del Skrevet 4. mai 2004 (endret) Kjørte akkurat spørringen i SSH på serveren, og da kom det kun 3 rader, nå er det ikke noen feil i php ihvertfall. Men jeg snakka med sven-o på PM i stad, i følge han fikk han kjørt scriptet slik det skulle blitt kjørt. edit: all data som kommer ut nå, er korrekt, det kommer bare ikke nok rader. Endret 4. mai 2004 av LoS Lenke til kommentar
???????? Skrevet 4. mai 2004 Del Skrevet 4. mai 2004 (endret) Så feilen: Du må tenke nøye gjennom group by, ikke GROUP BY kommentarer.nid - det er ikke det du er ute etter - prøv heller GROUP BY nyheter.id EDIT: vi postet nesten samtidig så jeg så ikke det du skrev. Det virker som det også kan skyldes group by. Poenget med LEFT JOIN er nettopp at den joiner tabell 2 hvis det er data i den som passer, tabell 1 er alltid med - ved mindre du begrenser det med f.eks. group by. Poster du spørringen her slik at andre kan se den. Mange som sikkert vil lære å joine tabeller. Endret 4. mai 2004 av ???????? Lenke til kommentar
sven-o Skrevet 4. mai 2004 Del Skrevet 4. mai 2004 (endret) f*en... Endret 4. mai 2004 av sven-o Lenke til kommentar
sven-o Skrevet 4. mai 2004 Del Skrevet 4. mai 2004 SELECT nyheter.*, COUNT(nid) as kommentarer FROM nyheter LEFT JOIN kommentarer ON nyheter.id = kommentarer.nid GROUP BY nyheter.id ORDER BY nyheter.id DESC LIMIT 0,10"); Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå