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
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
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?
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.
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
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
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"
> 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.
> 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
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
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
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