Avatar billede mrjowns Novice
17. maj 2003 - 20:22 Der er 59 kommentarer og
1 løsning

SELECT TOP fra MySQL db fortsat

Fortsat fra dette: http://www.eksperten.dk/spm/332131

Det viser sig at denne SQL sætning ikke tar de nyeste (IDvkc) poster men tar de øverste...!?

SELECT max(IDvkc), VKC.* FROM VKC GROUP BY TPOST ORDER BY TPOST

Hvad kan jeg gøre?
Avatar billede hossein Nybegynder
17. maj 2003 - 20:26 #1
Select top 10 * from VKC GROUP BY TPOST ORDER BY TPOST
Avatar billede mrjowns Novice
17. maj 2003 - 20:26 #2
Den skal kun tage de poster hvor RDATE = Now() eller hvis der er flere hvor TPOST = 10 og RDATE = Now() så skal den kun tage den nyeste?! Kan man det?
Avatar billede Slettet bruger
17. maj 2003 - 20:27 #3
Kan du ikke bare skifte TPOST ud med EmneTime, hvis det stadig er den som er timestampet?
Avatar billede mrjowns Novice
17. maj 2003 - 20:27 #4
Så vidt jeg ved kan man ikke bruge TOP til en MySQL, men jeg prøver....
Avatar billede mrjowns Novice
17. maj 2003 - 20:29 #5
Det kan man ikke - altså bruge TOP 10 til en MySQL database....
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 20:29 #6
Mener du ???
SELECT max(IDvkc), VKC.* FROM VKC GROUP BY TPOST ORDER BY TPOST DESC
Avatar billede mrjowns Novice
17. maj 2003 - 20:32 #7
erikjacobsen > Hmmm, nej den gør det stadig ikke rigtigt! Jeg har flere poster i min database der har højere IDvkc end dem SQL-strengen henter ud med denne - jeg forstår det ikke...???
Avatar billede hossein Nybegynder
17. maj 2003 - 20:32 #8
SELECT IDvkc FROM minTable VKC LIMIT 10,0 GROUP BY TPOST ORDER BY TPOST

eller

SELECT IDvkc FROM VKC LIMIT 0,10 GROUP BY TPOST ORDER BY TPOST
Avatar billede hossein Nybegynder
17. maj 2003 - 20:33 #9
rettes 1. sætning:
SELECT IDvkc FROM VKC LIMIT 10,0 GROUP BY TPOST ORDER BY TPOST
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 20:34 #10
SELECT max(IDvkc) as DDDD, VKC.* FROM VKC GROUP BY TPOST ORDER BY DDDD

??
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 20:35 #11
;) Det er lidt svært at gætte hvad du mener ...
Avatar billede mrjowns Novice
17. maj 2003 - 20:35 #12
hossein > Jeg er ikke sikker på at man kan bruge LIMIT til MySQL heller - ingen af dine forslag virker!
Avatar billede mrjowns Novice
17. maj 2003 - 20:40 #13
erikjacobsen > hehe, ok! Jeg skal have trukket de nyeste data ud af min MySQL database.

IDvkc (nøgle)
TPOST (nummer der angiver en vare)
RDATE (dato for indsættelse)
RTIME (tid for indsættelse)

Der kan sagtens være flere poster hvor der er flere TPOST, men SQL'en skal kun tage dem med de nyeste RDATE og RTIME?

Var det en bedre forklaring?
Avatar billede hossein Nybegynder
17. maj 2003 - 20:40 #14
det kan ikke passe:
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments. The arguments must be integer constants. If two arguments are given, the first specifies the offset of the first row to return, the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1): To be compatible with PostgreSQL MySQL also supports the syntax: LIMIT # OFFSET #.
mysql> SELECT * FROM table LIMIT 5,10;  # Retrieve rows 6-15
To retrieve all rows from a certain offset up to the end of the result set, you can use -1 for the second parameter:
mysql> SELECT * FROM table LIMIT 95,-1; # Retrieve rows 96-last.
If one argument is given, it indicates the maximum number of rows to return:
mysql> SELECT * FROM table LIMIT 5;    # Retrieve first 5 rows
In other words, LIMIT n is equivalent to LIMIT 0,n.
The SELECT ... INTO OUTFILE 'file_name' form of SELECT writes the selected rows to a file. The file is created on the server host and cannot already exist (among other things, this prevents database tables and files such as `/etc/passwd' from being destroyed). You must have the FILE privilege on the server host to use this form of SELECT. SELECT ... INTO OUTFILE is mainly intended to let you very quickly dump a table on the server machine. If you want to create the resulting file on some other host than the server host you can't use SELECT ... INTO OUTFILE. In this case you should instead use some client program like mysqldump --tab or mysql -e "SELECT ..." >

mere info: http://www.mysql.com/doc/en/SELECT.html
Avatar billede mrjowns Novice
17. maj 2003 - 20:43 #15
hossein > hmmm, men de virker i hvert fald ikke! Jeg får denne fejlmeddelelse:

Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax near 'GROUP BY TPOST ORDER BY TPOST' at line 1
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 20:48 #16
Du bør kun have ét felt til Dato+Tid - ellers får du problemer.
Du kan fx skrive max(rdate) men ikke kombinere den med max(rtime)
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 20:50 #17
og du skal angive max alle steder

  select max(...),max(....),max(....) from ...

for en * tager bare en "tilfældig"
Avatar billede mrjowns Novice
17. maj 2003 - 20:50 #18
Så vidt jeg ved sætter man tiden ind i RDATE alligevel selvom man ikke ber om det - er det ikke muligt så kun at bruge RDATE?
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 20:51 #19
jo da
Avatar billede mrjowns Novice
17. maj 2003 - 20:52 #20
Hvad gør jeg så, for denne her virker i hvert fald ikke:

SELECT max(IDvkc), VKC.* from VKC group by TPOST ORDER BY TPOST
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 20:53 #21
Men hvis der i en "tpost" er flere poster, og du ønsker at udtage alle
de felter der hører til den nyeste (med max(rdate)) kan du ikke bare gøre
sådan her. Er det ønsket?
Avatar billede mrjowns Novice
17. maj 2003 - 20:55 #22
I hele tabellen VKC er der flere TPOST med vædien 10 - jeg vil kun have den nyeste. Det samme gælder hvis der er flere TPOST med værdien 11 osv....
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 21:05 #23
Min fantasi en lørdag aften rækker desværre ikke lige til at ordne
det i ren SQL.

select * from vkc order by tpost,rdate desc

og så i gennemløbet kun udskrive første gang du møder en ny værdi i tpost
Avatar billede mrjowns Novice
17. maj 2003 - 21:06 #24
Jeg prøver det - point senere...
Avatar billede hossein Nybegynder
17. maj 2003 - 21:10 #25
du har stillet dette spm. før, hvorfor skifter du ikke til MSAccess :)
Avatar billede mrjowns Novice
17. maj 2003 - 21:12 #26
Hehe...! Ja, det var måske en idé! Nej, min kunde kræver at det ligger i en MySQL database og betaler mig for at finde ud af det ... hehe
Avatar billede hossein Nybegynder
17. maj 2003 - 21:16 #27
prøv en gang dette: (De nyste 4)
SELECT * FROM VKC GROUP BY TPOST ORDER BY TPOST LIMIT 0,4;  (eller 4,0)
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 21:16 #28
Du kan jo have en lille tabel ekstra - nu jeg forstår du ikke
bare sidder og hyggeprogrammerer en fredelig lørdag aften -
med en post for hvertpost. Hver ny indsættelser indsætter så
tpost,idvkc i denne ekstra tabel, men overskriver den gamle
tpost hver gang. Så har du dit svar med en simpel join.
Avatar billede mrjowns Novice
17. maj 2003 - 21:21 #29
Hmmm, hossein > det er meget mystisk! Jeg har en TPOST = 10, IDvkc = 24 og RDATE = 2003-03-22 - den kommer med istedet for TPOST = 10, IDvkc = 37 og RDATE = 2003-05-17

Det er underligt!!!!
Avatar billede hossein Nybegynder
17. maj 2003 - 21:23 #30
er det 0, 4 eller 4, 0?
Avatar billede mrjowns Novice
17. maj 2003 - 21:23 #31
0,4
Avatar billede mrjowns Novice
17. maj 2003 - 21:25 #32
Den anden vej - så får jeg ingen poster ud....
Avatar billede Slettet bruger
17. maj 2003 - 21:25 #33
Hvad med:
SELECT * FROM VKC GROUP BY TPOST ORDER BY TPOST DESC LIMIT 0,4
Avatar billede Slettet bruger
17. maj 2003 - 21:26 #34
Nej forkert sådan:
Hvad med:
SELECT * FROM VKC GROUP BY TPOST ORDER BY RDATE DESC LIMIT 0,4
Avatar billede hossein Nybegynder
17. maj 2003 - 21:29 #35
Hvor mange record har du i tabellen?
Avatar billede mrjowns Novice
17. maj 2003 - 21:29 #36
Bertie > Nej, det virker heller ikke! Se mit svar til hossein fra 21:21:33 - samme problem.... Jeg får ikke de nyeste!
Avatar billede mrjowns Novice
17. maj 2003 - 21:29 #37
Bertie > 14
Avatar billede hossein Nybegynder
17. maj 2003 - 21:30 #38
Mener du 14 rekord? mit svar?
Avatar billede mrjowns Novice
17. maj 2003 - 21:31 #39
Ja, jeg har 14 records i tabellen - 14 entries
Avatar billede Slettet bruger
17. maj 2003 - 21:32 #40
Denne her ORDER BY RDATE DESC burde altså vende datoerne, altså rækkefølgen på datoerne, så de bliver sorteret i faldende orden, d.v.s. nyeste først eller er jeg helt gal på den?
Avatar billede mrjowns Novice
17. maj 2003 - 21:33 #41
Nej, du har garanteret ret - problemet er e bare at den ikke gør det! :o(
Avatar billede hossein Nybegynder
17. maj 2003 - 21:33 #42
Indsæt dine record her så kan vi se problemet bedre!
Avatar billede mrjowns Novice
17. maj 2003 - 21:35 #43
Her er et udtræk:

#
# Struktur dump for tabellen `VKC`
#

CREATE TABLE VKC (
  IDvkc int(255) NOT NULL auto_increment,
  TPOST int(255) default NULL,
  TFLAG int(255) default NULL,
  VTEMP int(255) default NULL,
  LTEMP int(255) default NULL,
  TEXTR int(255) default NULL,
  RDATE date default NULL,
  RTIME time default NULL,
  ARCHIVED char(1) NOT NULL default '0',
  PRIMARY KEY  (IDvkc)
) TYPE=MyISAM;

#
# Data dump for tabellen `VKC`
#

INSERT INTO VKC VALUES (23, 15, 11, 15, 20, 5, '2003-03-22', '17:38:23', '0');
INSERT INTO VKC VALUES (24, 10, 11, 15, 20, 5, '2003-03-22', '17:42:03', '0');
INSERT INTO VKC VALUES (25, 15, 11, 15, 20, 5, '2003-03-22', '17:45:56', '0');
INSERT INTO VKC VALUES (26, 16, 12, 17, 25, 7, '2003-03-22', '20:23:05', '0');
INSERT INTO VKC VALUES (27, 11, 10, 17, 29, 7, '2003-03-22', '20:26:27', '0');
INSERT INTO VKC VALUES (28, 12, 10, 14, 27, 5, '2003-03-22', '20:27:15', '0');
INSERT INTO VKC VALUES (29, 13, 10, 19, 23, 5, '2003-03-22', '20:28:04', '0');
INSERT INTO VKC VALUES (30, 19, 10, 25, 31, 6, '2003-03-22', '22:30:30', '0');
INSERT INTO VKC VALUES (31, 18, 10, 16, 22, 1, '2003-03-23', '09:36:12', '0');
INSERT INTO VKC VALUES (32, 17, 11, 17, 26, 7, '2003-03-23', '11:25:32', '0');
INSERT INTO VKC VALUES (33, 14, 11, 17, 28, 7, '2003-03-23', '16:24:55', '0');
INSERT INTO VKC VALUES (35, 17, 11, 25, 35, 1, '2003-05-17', '18:36:08', '0');
INSERT INTO VKC VALUES (36, 18, 11, 25, 35, 1, '2003-05-17', '19:45:19', '0');
INSERT INTO VKC VALUES (37, 10, 11, 25, 35, 1, '2003-05-17', '19:50:46', '0');
Avatar billede hossein Nybegynder
17. maj 2003 - 21:35 #44
Hvad med at prøve uden group by og order by i første omgang altså:
SELECT * FROM VKC LIMIT 0,4
så kan vi prøve step by step
Avatar billede hossein Nybegynder
17. maj 2003 - 21:38 #45
har du prøvet eller du er faldet i søvn?  :-))
Avatar billede mrjowns Novice
17. maj 2003 - 21:40 #46
Er igang... ;o)
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 21:41 #47
Det er fordi en

  select a,b    group by a

formelt er forkert. Den ved ikke hvilken værdi af b den skal
tage fra de felter der har a tilfælles. MySql tillader det,
tilfældigvis, men du har ikke styr på hvilken af b-værdierne
den tager. Du kommer ingen vegne med en group by alene
Avatar billede mrjowns Novice
17. maj 2003 - 21:43 #48
erikjacobsen > Hvad ville dit forslag så være? Er det umuligt?

hossein > Det virker ikke! Den tager stadig kun den gamle værdi med!
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 21:48 #49
Jeg har givet dig 2 forslag. I ASP eller med en ekstra tabel.
ASP løsningen er OK, hvis der ikke er mange data
Avatar billede hossein Nybegynder
17. maj 2003 - 21:50 #50
Hvad med distinct:
Select distinct tpost order by TPOST desc
Avatar billede hossein Nybegynder
17. maj 2003 - 21:51 #51
Du kan tilføje flere felter efter TPOST også må se det hjælper?
Avatar billede mrjowns Novice
17. maj 2003 - 21:55 #52
Noup, det tror jeg ikke, hossein...! Det virker i hvert fald ikke!
Avatar billede hossein Nybegynder
17. maj 2003 - 21:56 #53
hvorfor du skal får nyeste TPOST på den måde?!
Avatar billede mrjowns Novice
17. maj 2003 - 21:58 #54
Hmm, jeg finder på en anden løsning! I har været seje allesammen så hvis I gider lave et svar (erikjacobsen, hossein) så skal I få point alligevel....
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 21:59 #55
Det er li'som ikke det han har brug for, hossein,
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 22:00 #56
Hvor, mrjowns, mener du hossein har været dig til hjælp,
siden du vil give ham point? Har har skrevet en masse,
javel, men har noget af det være tilnærmelsesvist korrekt?

Med den indstilling ønsker jeg IKKE at få point. Jeg er smuttet
Avatar billede hossein Nybegynder
17. maj 2003 - 22:00 #57
Hvad er det så han har brug for? :-)))
Avatar billede mrjowns Novice
17. maj 2003 - 22:02 #58
Ahhhh, erikjacobsen! Han har da bidraget og jeg må vel dele mine point ud som jeg har lyst! Jeg havde ikke tænkt mig at give ham mange point for jeg vil følge en af dine modelle - du ville have fået klart de fleste...! Du er derfor stadig velkommen med et svar!
Avatar billede hossein Nybegynder
17. maj 2003 - 22:06 #59
Hvorfor blev han sur? meningen er jo at hjælpe?
Avatar billede mrjowns Novice
25. juli 2003 - 13:58 #60
Hehe, okay nu har vi vist ventet længe nok på ham! Så du får bare pointene, hossein! Igen tak for hjælpen!!!
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
Kurser inden for grundlæggende programmering

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