Avatar billede lifeenergy Nybegynder
18. august 2008 - 21:27 Der er 28 kommentarer og
1 løsning

LONGTEXT i SELECT med LOOP og ORDER BY?

Hej,

Jeg er ved at prøve, at lave en Blog.

Databasens felter:

ID(SMALLINT)
Headline(VARCHAR)
Content(LONGTEXT)
Created(DATETIME)
AuthorID(SMALLINT)
Admin (TINYINT)


På selve siden har jeg lavet et loop

If NOT rs.EOF Then
  Do While NOT rs.EOF
O.s.v.

Jeg har prøvet at skrive:

SELECT b.ID, b.Headline, b.Created, b.AuthorID, b.Content FROM blogs b WHERE b.Admin=0 ORDER BY  Created DESC LIMIT 0, 2;

Men der kommer ikke noget resultat, selvom blogs indeholder 2 rækker.

Men det gør jeg af en eller anden grund IKKE, p.g.a. at jeg tager Content med.

Hvis jeg skriver:

SELECT b.ID, b.Headline, b.Created, b.AuthorID FROM blogs b WHERE b.Admin=0 ORDER BY Created DESC LIMIT 0, 2;

Så får jeg de 2 resultater frem, jeg har oprettet. Jeg vil gerne have "Content" med...

Hvis jeg fjerner "ORDER BY Created DESC" så kommer der resultater ud.

SELECT b.ID, b.Headline, b.Created, b.AuthorID, b.Content FROM blogs b WHERE b.Admin=0 LIMIT 0, 2;

Men hvorfor kan man ikke tage feltet med samtidigt med at man sorterer med Created?

Har også testet dem i MySQL Query Browser.

mvh
Lifeenergy
Avatar billede erikjacobsen Ekspert
18. august 2008 - 21:39 #1
Prøv dette: tag din oprindelige
SELECT b.ID, b.Headline, b.Created, b.AuthorID, b.Content FROM blogs b WHERE b.Admin=0 ORDER BY  Created DESC LIMIT 0, 2;
og øverst i din whileløkke tager du felterne ud i samme rækkefølge som de står i sql-sætningen, og lægger dem i variabler:
  id=...
  headline=...
  created=...
  ...osv.

og så bruger du variablerne, når du skriver ud. Hvis det virker får du en forklaring senere... :)
Avatar billede arne_v Ekspert
18. august 2008 - 21:51 #2
Hvis du udskriver evt. fejlmeddelser, saa vil du faa et hint til hvad problemet er.
Avatar billede lifeenergy Nybegynder
18. august 2008 - 21:56 #3
Mener du sådan?

Do While NOT rs.EOF
NumGetBlogID = rs("ID")
  strGetHeadline = rs("Headline")
    strGetCreated rs("Created")
strGetContent = rs("Content")

Det er sådan jeg har gjort.

Den siger rs.EOF, når jeg både tager "Content" og "ORDER BY" med.
Men det passer jo ikke, for der er poster.
Avatar billede erikjacobsen Ekspert
18. august 2008 - 22:09 #4
Ok. Hvilken mysql version og hvilken tabeltype (myisam, innodb,...)?
Avatar billede arne_v Ekspert
18. august 2008 - 22:10 #5
Brug af LONGTEXT antyder vaerdier > 24 MB.

Jeg gaetter paa at din MySQL og/eller driver ikke er konfigureret til at kunne klare
sorteringer af saa lange raekker.

Men en praecis fejl besked kunne af eller bekraefte den hypotese.
Avatar billede lifeenergy Nybegynder
18. august 2008 - 22:13 #6
Jeg har hørt at MyISAM skulle passe godt til formålet. Det er den sat til.
jeg kører ODBC 5.1 MySql server 6.0
Avatar billede lifeenergy Nybegynder
18. august 2008 - 22:17 #7
Jeg ved ikke så meget om hvad der kan bruges til at hente meget tekst.
Jeg har også en database med stories i. Beregnet til længere historier. Hvad kan være godt at bruge, når det fylder mere.?
Avatar billede erikjacobsen Ekspert
18. august 2008 - 22:19 #8
Mysql drivere til "ASP" er ikke nødvendigvis supergode. Men du siger der også er problemer, når du afvikler direkte i mysql query browser? Jeg kan ikke genskabe dit problem.
Avatar billede erikjacobsen Ekspert
18. august 2008 - 22:20 #9
Men jeg har heller ikke fyldt så meget i content-feltet. Hvor meget har du?
Avatar billede lifeenergy Nybegynder
18. august 2008 - 22:21 #10
Den viser nøjagtigt det samme i MySql browser som på siden.
Avatar billede erikjacobsen Ekspert
18. august 2008 - 22:31 #11
Men jeg ville nok prøve at oprette tabellen som InnoDB, med samme indhold selvfølgelig.
InnoDB er en mere moden tabeltype.
Avatar billede lifeenergy Nybegynder
18. august 2008 - 22:32 #12
SELECT b.ID, b.Headline, b.Created, b.AuthorID, b.Content FROM blogs b WHERE b.Admin=0 ORDER BY Created DESC LIMIT 0, 2;

0 rows fetched in 0,0020s(0,0013s)
Fjerner jeg WHERE clause

SELECT b.ID, b.Headline, b.Created, b.AuthorID, b.Content FROM blogs b ORDER BY Created DESC LIMIT 0, 2;

Kommer der 2 rækker frem...
Avatar billede lifeenergy Nybegynder
18. august 2008 - 22:37 #13
SELECT b.ID, b.Headline, b.Created, b.AuthorID, b.Content FROM blogs b WHERE AuthorID=1 ORDER BY Created DESC LIMIT 0, 2;

Nu virker det!
Jeg ændrede blot til InnoDB for selve tabellen.

Hvad er egentlig forskellen på disse tabeltyper?

Findes der andre datatyper der er bedre at bruge end LONGTEXT? Måske kunne MEDIUMTEXT bruges?
Avatar billede arne_v Ekspert
18. august 2008 - 22:43 #14
TEXT - op til 64 KB
MEDIUMTEXT - op til 16 MB  (jeg skrev vist 24 laengere oppe men det er forkert)
LONGTEXT - op til 2 GB
Avatar billede lifeenergy Nybegynder
18. august 2008 - 22:54 #15
Du skrev "LONGTEXT antyder værdier > 24 MB"

Så kan det være at jeg kan klare mig med MEDIUMTEXT - eller TEXT.
Hvor meget mon fylder en side tekst inkl. mellemrum og linjeskift?
Avatar billede erikjacobsen Ekspert
18. august 2008 - 23:10 #16
Det kommer an på størrelsen ;)  Men den side du sidder og kigger på lige nu er på ca. 22 kB.
Avatar billede lifeenergy Nybegynder
18. august 2008 - 23:22 #17
Jeg tror jeg vælger MEDIUMTEXT - det må være rigeligt til mit site.
Avatar billede lifeenergy Nybegynder
18. august 2008 - 23:26 #18
Hvis jeg kigger på et Word dokument, er det nok rigeligt at regne med omkring 4000 tegn inkl. mellemrum og linjeskift pr. side.
Avatar billede arne_v Ekspert
19. august 2008 - 03:21 #19
Et Word dokument skal i BLOB/MEDIUMBLOB/LONGBLOB.

Og husk at et Word dokument med billeder eller lignende kan blive meget stort.
Avatar billede lifeenergy Nybegynder
19. august 2008 - 14:14 #20
Jeg har ikke planer om at indsætte selve word -dokumentet. Jeg brugte det til at se hvor mange tegn der typisk er på en side. Hvis vi taler om omkring 4000 tegn, så er spørgsmålet hvor meget 4000 tegn af tekst med mellemrum og linjeskift fylder i MB.
Avatar billede erikjacobsen Ekspert
19. august 2008 - 14:21 #21
Det fylder ca. 4 kByte, altså ca. 0.4 MByte.
Avatar billede erikjacobsen Ekspert
19. august 2008 - 14:22 #22
Eh. 0.004 MByte  :)
Avatar billede lifeenergy Nybegynder
19. august 2008 - 14:36 #23
Ok så kan man måske nøjes med at benytte datatypen TEXT:)
Avatar billede lifeenergy Nybegynder
19. august 2008 - 15:48 #24
Tak for alt hjælpen. Du har ikke evt. et link, hvor jeg kan læse mere om tabeltyper m.v?
Avatar billede erikjacobsen Ekspert
19. august 2008 - 15:59 #26
Ikke umiddelbart. Der er altid http://dev.mysql.com/
Avatar billede lifeenergy Nybegynder
19. august 2008 - 16:24 #27
Ok, smid et svar:)
Avatar billede erikjacobsen Ekspert
19. august 2008 - 17:22 #28
Ingen point til mig, tak.
Avatar billede lifeenergy Nybegynder
20. august 2008 - 16:52 #29
Ok... Jeg lukker spm.
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
Computerworld tilbyder specialiserede kurser i database-management

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