/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Kommentar system - problem med udtræk fra ~
Fra : haris


Dato : 05-12-09 19:27

Hej html'er.

Jeg er i gang med at lave et "kommentar system" til mine nyheder.
Her er tabellerne til databasen:

#Nyheder
CREATE TABLE `nyheder` (
`id` int(11) NOT NULL auto_increment,
`overskrift` varchar(255) NOT NULL,
`nyhed` longtext NOT NULL,
`kommentarer` int(1) NOT NULL default '0',
`forfatter` varchar(255) NOT NULL,
`dato` date NOT NULL,
`ip` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;

#Kommentarer
CREATE TABLE `nyheds_kommentarer` (
`id` int(11) NOT NULL auto_increment,
`nyheds_id` int(11) NOT NULL default '0',
`navn` varchar(255) NOT NULL,
`kommentar` varchar(255) NOT NULL,
`dato` date NOT NULL,
`ip` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;

Når jeg har valgt en nyhed - med id, kan jeg sagtens få det vist
frem og alt det der. Fx: index.php?site=nyheder&id=9.
- Det, jeg gerne vil lave, er, at inde på nyheds siden - hvor
alle nyhederne
er, vil jeg gerne have, at man kan se, hvor mange kommentarer der
er til hver nyhed.

Fx:
Nyhed 1.
   Headline
tekst tekst tekst tekst tekst tekst tekst tekst
tekst tekst tekst tekst tekst tekst tekst tekst

      (9) kommentarer.
Nyhed 2.
   Headline
tekst tekst tekst tekst tekst tekst tekst tekst
tekst tekst tekst tekst tekst tekst tekst tekst

      (4) kommentarer.

Hvordan kan jeg få kaldt de kommentarer frem, der er til den
pågælende nyhed, uden at være under det pågældende id - hvis i
forstår. Altså når man er inde på index.php?site=nyheder.

Forstår i hvad jeg mener?

//Haris

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
haris (06-12-2009)
Kommentar
Fra : haris


Dato : 06-12-09 16:11

Ingen der har noget svar?
- Hvis det er fordi, det ikke er forståeligt nok, skal jeg nok
uddybe mig lidt mere.

//Haris

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Leif Neland (06-12-2009)
Kommentar
Fra : Leif Neland


Dato : 06-12-09 21:22

haris skrev:
> Ingen der har noget svar?
> - Hvis det er fordi, det ikke er forståeligt nok, skal jeg nok
> uddybe mig lidt mere.
>

Måske er der ingen, der kan se hvad der skulle være af problemer i det?

Leif

--
Jeg foretrækker min the tilberedt efter BS6008

haris (06-12-2009)
Kommentar
Fra : haris


Dato : 06-12-09 22:58

Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
> Måske er der ingen, der kan se hvad der skulle være af problemer i dets?

Mit problem er, at jeg ikke kan få kaldt antallet af de kommentarer, der
er for hver nyhed, frem uden at være inde på en valgt nyhed.

Altså:
index.php?site=nyheder&id=7
- Det viser min nyhed med id 7. Da id'et er valgt, er det nemt nok at
trække kommentarene ud.

Hvis jeg er inde på:
index.php?site=nyheder (hvor alle nyhederne vises), kan jeg ikke få vist
kommentarene frem til nyheden, da der ikke er valgt et id.

Forstår du nu?

//Haris



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Leif Neland (06-12-2009)
Kommentar
Fra : Leif Neland


Dato : 06-12-09 23:27

haris skrev:
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
>> Måske er der ingen, der kan se hvad der skulle være af problemer i dets?
>
> Mit problem er, at jeg ikke kan få kaldt antallet af de kommentarer, der
> er for hver nyhed, frem uden at være inde på en valgt nyhed.
>
> Altså:
> index.php?site=nyheder&id=7
> - Det viser min nyhed med id 7. Da id'et er valgt, er det nemt nok at
> trække kommentarene ud.
>
> Hvis jeg er inde på:
> index.php?site=nyheder (hvor alle nyhederne vises), kan jeg ikke få vist
> kommentarene frem til nyheden, da der ikke er valgt et id.
>
SELECT nyheder.id,overskrift,nyheder.dato,count(*) AS antal
FROM nyheder LEFT JOIN nyheds_kommentarer
ON nyheder.id=nyheds_kommentarer
GROUP BY nyheder.id,overskrift
Seneste først:
ORDER BY nyheder.dato DESC
Mest kommentereder:
ORDER BY count(*) DESC

Leif
--
Jeg foretrækker min the tilberedt efter BS6008

haris (07-12-2009)
Kommentar
Fra : haris


Dato : 07-12-09 16:07

Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
> SELECT nyheder.id,overskrift,nyheder.dato,count(*) AS antal
> FROM nyheder LEFT JOIN nyheds_kommentarer
> ON nyheder.id=nyheds_kommentarer

Jeg har prøvet at sætte dette ind:

$n_rez = mysql_query( "SELECT id,overskrift,nyhed,dato,count(*) AS antal FROM
nyheder LEFT JOIN ON id=nyheds_kommentarer GROUP BY id");
while ($n_arr = mysql_fetch_array($n_rez)) {

Ender ud med dette:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
resource in /host/w/e/b/website2/Praxic/orden/test2.php on line 6

Efter at have set lidt forskellige steder, burde dit eksempel virke, men jeg
må have lavet en fejl.

//Haris.




--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin (07-12-2009)
Kommentar
Fra : Martin


Dato : 07-12-09 17:00

On 07-12-2009 16:07, haris wrote:
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
>> SELECT nyheder.id,overskrift,nyheder.dato,count(*) AS antal
>> FROM nyheder LEFT JOIN nyheds_kommentarer
>> ON nyheder.id=nyheds_kommentarer
>
> Jeg har prøvet at sætte dette ind:
>
> $n_rez = mysql_query( "SELECT id,overskrift,nyhed,dato,count(*) AS antal FROM
> nyheder LEFT JOIN ON id=nyheds_kommentarer GROUP BY id");

Brug ALTID

$n_rez = mysql_query(.....) OR DIE (mysql_error());

Så får man en dejlig fejl hvis der skulle være fejl i din query, som der
er i din...

> while ($n_arr = mysql_fetch_array($n_rez)) {
>
> Ender ud med dette:
>
> Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
> resource in /host/w/e/b/website2/Praxic/orden/test2.php on line 6

Fejl i querien

Leif Neland (07-12-2009)
Kommentar
Fra : Leif Neland


Dato : 07-12-09 19:29

haris skrev:
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
>> SELECT nyheder.id,overskrift,nyheder.dato,count(*) AS antal
>> FROM nyheder LEFT JOIN nyheds_kommentarer
>> ON nyheder.id=nyheds_kommentarer
>
> Jeg har prøvet at sætte dette ind:
>
> $n_rez = mysql_query( "SELECT id,overskrift,nyhed,dato,count(*) AS antal FROM
> nyheder LEFT JOIN ON id=nyheds_kommentarer GROUP BY id");
> while ($n_arr = mysql_fetch_array($n_rez)) {
>
> Ender ud med dette:
>
> Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
> resource in /host/w/e/b/website2/Praxic/orden/test2.php on line 6
>
> Efter at have set lidt forskellige steder, burde dit eksempel virke, men jeg
> må have lavet en fejl.
>
Ja. Der er en kolonne, der hedder id i begge tabeller, så derfor skal de
kvalificeres. Det er derfor jeg skriver
SELECT nyheder.id,
og
ON nyheder.id=nyheds_kommentarer.nyhedsid

Hvorfor klippe-klistrede du ikke bare?

Leif
--
Jeg foretrækker min the tilberedt efter BS6008

haris (07-12-2009)
Kommentar
Fra : haris


Dato : 07-12-09 22:45

Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
> Hvorfor klippe-klistrede du ikke bare?

Det gjorder jeg også i starten, men det gav også fejl. Derefter prøvede jeg at
rette id'erne, som de var i tabellerne. Jeg misforstår, hvilke id'er du har gang
i.
Hvis vi lige gennemgår dem:
> SELECT nyheder.id, ....
Jeg gik ud fra, at nyheder.id var det id, der er for hver nyhed, så jeg ændrede
det til id, som det hedder i tabellen.

> LEFT JOIN ON nyheder.id=nyheds_kommentarer
Med nyheder.id har jeg prøvet at lave det om til nyheds_id, som er en af mine
id'er i kommentar tabellen, men jeg har også prøvet med id. De to id'er burde have
det samme tal.

> GROUP BY nyheder.id,overskrift
Der gik jeg ud fra, at det var fra nyheds_tabellen, så jeg lavede det om til id,
overskrift.

Nu ser den således ud:
$n_rez = mysql_query( "SELECT id,overskrift,nyhed,dato,count(*) AS antal FROM
nyheder LEFT JOIN nyheds_kommentarer ON nyheds_id=nyheds_kommentarer GROUP BY
id,overskrift") OR DIE (mysql_error());

Fejlmeddelsen:
Column 'id' in field list is ambiguous

//Haris



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Gert Krabsen (07-12-2009)
Kommentar
Fra : Gert Krabsen


Dato : 07-12-09 22:57

haris skrev:
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
>> Hvorfor klippe-klistrede du ikke bare?
>
> Det gjorder jeg også i starten, men det gav også fejl. Derefter prøvede jeg at
> rette id'erne, som de var i tabellerne. Jeg misforstår, hvilke id'er du har gang i.
> Hvis vi lige gennemgår dem:
>> SELECT nyheder.id, ....
> Jeg gik ud fra, at nyheder.id var det id, der er for hver nyhed, så jeg ændrede
> det til id, som det hedder i tabellen.
>
>> LEFT JOIN ON nyheder.id=nyheds_kommentarer
> Med nyheder.id har jeg prøvet at lave det om til nyheds_id, som er en af mine
> id'er i kommentar tabellen, men jeg har også prøvet med id. De to id'er burde have
> det samme tal.

Du er ikke særlig konsekvent i din felt-navngivning. Det interessante er
ikke, om de har samme tal, men hvad feltnavnene er.

Det kan godt være de er ens men husk, at edb er dum som en dør! Alt skal
pindes ud. Den 'går aldrig ud fra' noget.

>> GROUP BY nyheder.id,overskrift
> Der gik jeg ud fra, at det var fra nyheds_tabellen, så jeg lavede det om til id,
> overskrift.

> Nu ser den således ud:
> $n_rez = mysql_query( "SELECT id,overskrift,nyhed,dato,count(*) AS antal FROM
> nyheder LEFT JOIN nyheds_kommentarer ON nyheds_id=nyheds_kommentarer GROUP BY
> id,overskrift") OR DIE (mysql_error());
>
> Fejlmeddelsen:
> Column 'id' in field list is ambiguous

Klart - når du har et felt 'id' i begge tabeller i sql'en - hvordan skal
den så vide, hvilken den skal vise?

Og husk, at det som regel ikke er tilladt at summere på *

Så noget i retning af (med forbehold for, at vi ikke kender meget til
din datastruktur (gør du selv det?

SELECT
nyheder.id, nyheder.overskrift, nyheder.nyhed, nyheder.dato,
count(nyheds_kommentarer.id) AS antal
FROM nyheder
LEFT JOIN nyheds_kommentarer
ON nyheder.nyheds_id=nyheds_kommentarer.nyheds_id
GROUP BY nyheder.id, nyheder.overskrift, nyheder.nyhed, nyheder.dato"



haris (07-12-2009)
Kommentar
Fra : haris


Dato : 07-12-09 23:12

Gert Krabsen wrote in dk.edb.internet.webdesign.serverside.php:
> Klart - når du har et felt 'id' i begge tabeller i sql'en - hvordan skal
> den så vide, hvilken den skal vise?
Så jeg skal ikke have id i hver tabel?

> Så noget i retning af (med forbehold for, at vi ikke kender meget til
> din datastruktur (gør du selv det?
Forstår da dit spørgsmål, og dog. Jeg forstår min datastruktur. Jeg er en nybegynder,
har ikke arbejdet med så mange forskellige ting, så jeg er stadig under udvikling. Jeg
har dog fået en stor hjælp fra en erfaren programmør.

> SELECT
> nyheder.id, nyheder.overskrift, nyheder.nyhed, nyheder.dato,
> count(nyheds_kommentarer.id) AS antal
> FROM nyheder
> LEFT JOIN nyheds_kommentarer
> ON nyheder.nyheds_id=nyheds_kommentarer.nyheds_id
> GROUP BY nyheder.id, nyheder.overskrift, nyheder.nyhed, nyheder.dato"

Tak for det hurtige svar og opdelingen af de forskellige id'er. Det forstås bedre nu.
> count(nyheds_kommentarer.id) AS antal
Jeg har ikke noget nyheds_kommentarer_id i min nyhedstabel. Jeg så lige, at der var en
række med "kommentarer" i nyhedstabellen - det er en fejl. Den har ikke nogen funktion,
men det skal der måske være?

- Tak for det hurtige svar.

//Haris

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Stig Johansen (08-12-2009)
Kommentar
Fra : Stig Johansen


Dato : 08-12-09 04:44

haris wrote:

> Jeg så lige,
> at der var en række med "kommentarer" i nyhedstabellen - det er en fejl.
> Den har ikke nogen funktion, men det skal der måske være?

Jeg har undret mig fra starten over hvorfor du ikke brugte det felt.
Den bedste metode er at opdatere antal kommentarer (i feltet) under hver
nyhed, nå der kommer nye kommentarer.

På den måde undgår du join og count, der er rimeligt performancekrævende i
forholdt til informationen.

--
Med venlig hilsen
Stig Johansen

Leif Neland (08-12-2009)
Kommentar
Fra : Leif Neland


Dato : 08-12-09 13:58


"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:4b1dcca2$0$276$14726298@news.sunsite.dk...
> haris wrote:
>
>> Jeg så lige,
>> at der var en række med "kommentarer" i nyhedstabellen - det er en fejl.
>> Den har ikke nogen funktion, men det skal der måske være?
>
> Jeg har undret mig fra starten over hvorfor du ikke brugte det felt.
> Den bedste metode er at opdatere antal kommentarer (i feltet) under hver
> nyhed, nå der kommer nye kommentarer.
>
> På den måde undgår du join og count, der er rimeligt performancekrævende i
> forholdt til informationen.
>
Det er vel der, hvor man må opveje performance imod en pæn normalisering af
databasen.
Hvis kommentar-tabellen er indexeret på nyheds_id. burde det ikke være
tungt.

Det kan hurtigt blive lidt langhåret at skulle holde styr på antallet ved
hver opdatering, hvis der kan tænkes at komme opdateringer fra flere brugere
på een gang.

Leif



Leif Neland (08-12-2009)
Kommentar
Fra : Leif Neland


Dato : 08-12-09 14:03


"haris" <haris_skrijelj12@hotmail.com> skrev i en meddelelse
news:4b1d7744$0$269$14726298@news.sunsite.dk...
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
>> Hvorfor klippe-klistrede du ikke bare?
>
> Det gjorder jeg også i starten, men det gav også fejl. Derefter prøvede
> jeg at
> rette id'erne, som de var i tabellerne. Jeg misforstår, hvilke id'er du
> har gang
> i.
> Hvis vi lige gennemgår dem:
>> SELECT nyheder.id, ....
> Jeg gik ud fra, at nyheder.id var det id, der er for hver nyhed, så jeg
> ændrede
> det til id, som det hedder i tabellen.
>

NEJ NEJ NEJ

Du mangler vist lige at forstå hvad punktum betyder.
nyheder.id = nyheds_kommentarer.nyheds_id

Tabellen nyheder,felt id skal være lig tabellen nyheds_kommentarer, feltet
nyheds_id

tabel.felt

Kan endda være

database.tabel.felt

Leif



haris (08-12-2009)
Kommentar
Fra : haris


Dato : 08-12-09 15:43

Leif Neland wrote in dk.edb.internet.webdesign.serverside.php:
> Kan endda være
> database.tabel.felt

Det fandt jeg hurtigt ud af. Jeg troede, at det med tabel.felt var noget du
gjorde for, at jeg nemmere kunne forstå det. :)
Men der tog jeg fejl - fik lige lært noget nyt.

Har fået det til at virke nu - efter jeg brugte det med tabel.felt.
Her er det:

"SELECT nyheder.id, overskrift, nyhed, nyheder.dato, count(*) AS antal FROM
nyheder LEFT JOIN nyheds_kommentarer ON
nyheder.id=nyheds_kommentarer.nyheds_id GROUP BY nyheder.id, overskrift"

Mange tak for hjælpen Leif.

// Haris


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste