Avatar billede ReneDahl Praktikant
22. oktober 2011 - 17:25 Der er 16 kommentarer og
1 løsning

Hjælp! tælle indholdet af nyheder under en bestemt kategori.

Hej alle sammen, jeg har et problem som jeg ikke rigtig kan løse
måske er der en af jer der ved hvad der kan være galt?

Jeg har metode her som henter alle mine kategorier ud



public DataTable GetAllNewsByCat(int ID)
    {


        _cmd = new MySqlCommand("select * from tblnews where fldkat=?ID? ");
      // _cmd = new MySqlCommand("@SELECT COUNT(fldkat) AS CustomerNilsen FROM tblnews WHERE fldkat=1");
        _cmd.Parameters.Add("?ID?", MySqlDbType.Int32).Value = ID;

        return _objConn.GetData(_cmd);
    }

og den her skulle gerne tælle indholdet af en enkelt kategori

  public DataTable ShowAllNewsUnderCSharp()
    {
        _cmd = new MySqlCommand("SELECT COUNT(fldkat) AS CustomerNilsen FROM tblnews WHERE fldkat=1");
       
     

        return _objConn.GetData(_cmd);

    }


Jeg kan godt få hentet mine kategori ud på code-behind siden. men jeg kan fx ikke få til at stå hvor mange nyheder der er under en bestemt kategori.
Avatar billede Syska Mester
22. oktober 2011 - 17:36 #1
Nu er det jo ikke til at vide hvad:
_objConn.GetData(_cmd);

Din GetDate() method gør.

Men kan du komme mere præcis ind på hvad problemet er ?

Din:
cmd = new MySqlCommand("SELECT COUNT(fldkat) AS CustomerNilsen FROM tblnews WHERE fldkat=1");

Burde kun returnere 1 row og 1 column. Så kan du ikke kigge i din DataTable efter den ?

table.Rows[0].Cols[0] ? (Hvis jeg husker rigtigt)

Men du skal måske kigge på ExecuteScalar() som den den første row og den første column.

mvh
Avatar billede ReneDahl Praktikant
22. oktober 2011 - 20:51 #2
metoderne virker. Men det bare lige hvordan det skal skrives. Jeg kan hun få vist kategorierne, men ikke få vist hvor mange nyheder der er under hver kategori..

her er et eksemepel hvor jeg henter mine kategorier ud via en foreach..

foreach (DataRow row2 in objFac.GetAllNews().Rows)
            {

litNyhedsKategorier.Text += "<a href=\"VisNyhedsKategori.aspx?id=" + row2["fldID"] + "\" class=\"Mnu2\">"  + row2["fldKatNavn"] + "</a>";
             
            }
Avatar billede arne_v Ekspert
22. oktober 2011 - 21:00 #3
Er det COUNT sammen med GROUP BY du leder efter?

a la:

SELECT kat.navn,COUNT(*) AS n
FROM kat JOIN nyhed ON kat.id=nyhed.katid
GROUP BY kat.navn
Avatar billede Syska Mester
22. oktober 2011 - 22:38 #4
Tror Arne_v er på rette spor, lyder i hvert fald som noget ala det rigtige.

Hvis det er ASP.NET WebForms, så ville jeg nok bruge en Repeater eller DataList.

Hvis du bliver ved dette ... så brug en StringBuilder som du derefter laver en assign til din: litNyhedsKategorier.Text

Hvorfor må du nok spørge ... Performance, string concatanering er LANGSOM hvis du har mange kategorier, og det kan løses med en StringBuilder.

mvh
Avatar billede ReneDahl Praktikant
22. oktober 2011 - 23:24 #5
Ja tror måske det er noget .  count  med group by jeg leder efter.

hvis man forstiller sig at vi har nogle kategori, så skal den tælle hvor mange emner der i hver kategori.. fx

html(5)
.net(2)
css(3)

osv.

og ja det er webform jeg laver det i  :).
Avatar billede Syska Mester
22. oktober 2011 - 23:27 #6
Kig lige på arne_v kommentar, han har jo faktisk lavet den query du leder efter ( hvis den altså passer med din column names )

mvh
Avatar billede ReneDahl Praktikant
23. oktober 2011 - 00:14 #7
Jeg prøver at se om jeg kan løse det uden held. jeg er ikke så god til det med joins.  :)



select fldKatNavn,
count(*) as n
from tblmenukat
join tblnews on tblmenukat.fldID=tblnews.fldID
group by tblmenukat.fldKatNavn
Avatar billede Syska Mester
23. oktober 2011 - 00:28 #8
ja, virker den ikke? Hvis den kommer med en fejl, hvad siger den så?

Som en lille kommentar, hvordan i al verden er det du navn giver dine ting?
fldID?
fldKatNavn?

Hvis det er for at spare tegn ... så glem det, ingen andre kan gennemskue det og det giver heller ikke performance. Det giver bare noget utroligt mærkeligt kode at læse.

mvh
Avatar billede ReneDahl Praktikant
23. oktober 2011 - 00:35 #9
fld står bare for field, men ja, det bare rutine fra da jeg gik på skole :)men ja man kan lige så godt skrive ID istedet fir fldID
Avatar billede ReneDahl Praktikant
23. oktober 2011 - 00:39 #10
den kommer ikke med fejl den viser bare ikke hvad jeg vil have den til :)
Avatar billede Syska Mester
23. oktober 2011 - 00:43 #11
Hvad viser den og hvad vil du have den til?

En beskrivelse som "det virker ikke" kan ikke bruges til meget, specielt hvis den data du får tilbage ikke er korrekt.

Kan du poste hvad du ville forvente den gav dig og hvad du gerne vil have tilbage ?

Mht til navngivning. Kald ting hvad de er, spar ikke på bogstaver ej heller table names.
Jeg HADER wacky names ... når felt navnet kan være 100% beskrivende.
Avatar billede ReneDahl Praktikant
23. oktober 2011 - 00:49 #12
jeg ville gerne have sql sætningen til at vise mine kategori og tælle hvor mange emner der er inden i. noget a la det her

.net (2)
html(4)
css(5)

hvis du forstår. :)

bedre kan jeg ikke forklare det.
Avatar billede Syska Mester
23. oktober 2011 - 01:02 #13
Hvordan ser din data ud ? ( incl alle de columns names )

Jeg har en ide om du joiner på de forkert columns, men da jeg ikke kan tyde din navne er det ikke nemt.

Du skal joine din primary key i din Kat table med din foreign key i din News table.

select fldKatNavn,
count(*) as n
from tblmenukat
join tblnews on tblmenukat.fldID=tblnews.KatID
group by tblmenukat.fldKatNavn

Så måske noget ala det ...
Avatar billede ReneDahl Praktikant
23. oktober 2011 - 13:45 #14
Anyway tak for jeres hjælp. har fået det til at virke :)
Avatar billede Syska Mester
23. oktober 2011 - 18:59 #15
svar.

Hvad var problemet som løste den sidste del ?

mvh
Avatar billede ReneDahl Praktikant
24. oktober 2011 - 00:35 #16
mhm, join og group by. det hjalp. Men jeg var kommet til at joine to forkerte tabeller. Men anyway tak for jeres hjælp! :)
Avatar billede Syska Mester
24. oktober 2011 - 00:51 #17
Nu er jeg forvirret, du har brugt hjælp fra Arne_v og jeg, men alligevel acceptere du dit eget svar, som er 99% en løsning vi kom med.

Arne_v med join og group by

Jeg med videre forklaring og at du nok joinede forkerte ID'er siden du ikke fik det rigtige ud.

mvh
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester