"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]
1
| SELECT max(id) AS maxid FROM work WHERE id=max(id) GROUP BY id; |
nopeOp woensdag 26 juni 2002 19:54 schreef Terranca het volgende:
Just a thought, maar probeer dit s:
code:
1 SELECT max(id) AS maxid FROM work WHERE id=max(id) GROUP BY id;
offtopic,
het viel me op dat die postgres query van hier boven een error in phpmyadmin geeft maar op de cmdline wel gewoon werkt maar ook helaas alle rows terug geeft
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
dat werkt idd,Op woensdag 26 juni 2002 19:56 schreef Cheatah het volgende:
code:
1 2 3 4 SELECT * FROM work ORDER BY id LIMIT 1
hoewel dan moettie wel zo:
SELECT * from work order by id DESC limit 1;
het is een manier maar ik vraag me toch af waarom mijn syntax fout is.
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
Als hij alleen het id nodig heeft lijktOp woensdag 26 juni 2002 19:56 schreef Cheatah het volgende:
code:
1 2 3 4 SELECT * FROM work ORDER BY id LIMIT 1
SELECT id FROM work ORDER BY id DESC LIMIT 1
nog iets beter op de oplossing.
(edit DESC vergeten)
1
| select max(id) as maxid from work |
Deze werkt hier ook, maar bovenstaande is evenwel goed. Verschil in performance moet je niet aan mij vragen, maar zal wel minimaal zijn
Verwijderd
Het is natuurlijk wel omslachtig, maar als max() niet werkt, dan is dit een aardige workaround.
dan zou het echt MAX(id) moeten zijn
SELECT max(id) AS maxid FROM work WHERE id=maxid GROUP BY id;
alleen wat heeft die WHERE clause voor zin? ook zonder die clause en die GROUP levert het je wel het hoogste ID op, dus beetje zinloos IMHO
en die opmerking van mysql_insert_id() is ook redelijk loos...ik ga er niet van uit dat hij eerst een insert doet alvorens resultaat op te halen
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
Zéér omslachtig, en denk dat max() het best doet, mits je het goed gebruiktOp woensdag 26 juni 2002 20:02 schreef BaseLine het volgende:
Wat je ook kan doen is een query maken van alle id's (gesorteerd) en vervolgens met een while loop het te doorlopen waarna je de id telkens in dezelfde variabele opslaat. Als het goed is heeft die variabele aan het einde van de rit dan de waarde die je wilt hebben.
Het is natuurlijk wel omslachtig, maar als max() niet werkt, dan is dit een aardige workaround.
OMG! dat is pas een zinloze oplossing, je zou zeker een table hebben met 2 miljoen records, dan ga jij zeker eerst fijn je zooi in een array opslaan, die sorteren en dan de laatste record eruit halen? praten we over omslachtigOp woensdag 26 juni 2002 20:02 schreef BaseLine het volgende:
Wat je ook kan doen is een query maken van alle id's (gesorteerd) en vervolgens met een while loop het te doorlopen waarna je de id telkens in dezelfde variabele opslaat. Als het goed is heeft die variabele aan het einde van de rit dan de waarde die je wilt hebben.
Het is natuurlijk wel omslachtig, maar als max() niet werkt, dan is dit een aardige workaround.
MAX() werkt wel, mits je het goed gebruikt...
wat jij wil is dit:
SELECT id FROM work ORDER BY id DESC LIMIT 0,1
simpel
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
Verwijderd
1
2
3
4
5
6
7
| SELECT * FROM work WHERE ID = ( SELECT MAX(id) FROM work ); |
nou ik denk dat dit in performance gezien minder goed werkt...Op woensdag 26 juni 2002 20:02 schreef Charlie23 het volgende:
[..]
Als hij alleen het id nodig heeft lijkt
SELECT id FROM work ORDER BY id DESC LIMIT 1
nog iets beter op de oplossing.
(edit DESC vergeten)
op deze manier haalt SQL de hele resultset op, om die vervolgens te sorteren op ID aflopend en dan het laatste resultaat te retourneren
die MAX(), als je een index op die column hebt staan, hoeft niet de hele tabel te doorzoeken...dus veel efficienter
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
[offtopic] praat die jongen nou geen bullshit aan, daar leert ie niet vanOp woensdag 26 juni 2002 20:07 schreef BaseLine het volgende:
[..]
Dat zeg ik: een workaround
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
die group by clause moet je verplicht altijd gebruiken als je MAX(), count() etc gebruiktOp woensdag 26 juni 2002 20:04 schreef SilentThunder het volgende:
WHERE id=maxid is zowieso fout, MySQL pikt het niet dat je een column aanwijst die jij gebruikt als alias...
dan zou het echt MAX(id) moeten zijn
SELECT max(id) AS maxid FROM work WHERE id=maxid GROUP BY id;
alleen wat heeft die WHERE clause voor zin? ook zonder die clause en die GROUP levert het je wel het hoogste ID op, dus beetje zinloos IMHO
en die opmerking van mysql_insert_id() is ook redelijk loos...ik ga er niet van uit dat hij eerst een insert doet alvorens resultaat op te halen
die where clause moet je gebruiken anders krijg je alsnog alle rows terug...
dat van die alias wist ik idd niet
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
nee dat hoeft niet verplicht...Op woensdag 26 juni 2002 20:10 schreef GiLuX het volgende:
[..]
die group by clause moet je verplicht altijd gebruiken als je MAX(), count() etc gebruikt
die where clause moet je gebruiken anders krijg je alsnog alle rows terug...
dat van die alias wist ik idd niet
kheb MySQL Front open hier en deze query:
SELECT MAX(id) FROM tutorial_stats
levert mij netjes 5007 op, dus zeg nou niet dat dat niet werkt
zo'n GROUP BY of HAVING statement is alleen nodig als je je results wil opdelen per kolom zeg maar, dus als je in mijn tabel als voorbeeld, zou willen zien welke tutorials een bepaald aantal views hebben.
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
interesting...Op woensdag 26 juni 2002 20:08 schreef SilentThunder het volgende:
[..]
nou ik denk dat dit in performance gezien minder goed werkt...
op deze manier haalt SQL de hele resultset op, om die vervolgens te sorteren op ID aflopend en dan het laatste resultaat te retourneren
die MAX(), als je een index op die column hebt staan, hoeft niet de hele tabel te doorzoeken...dus veel efficienter
maar wat is nou de goede oplossing met MAX() erin?
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
SELECT MAX(id) FROM workOp woensdag 26 juni 2002 20:13 schreef GiLuX het volgende:
[..]
interesting...
maar wat is nou de goede oplossing met MAX() erin?
dat moet gewoon werken
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
woops, sorryOp woensdag 26 juni 2002 20:12 schreef SilentThunder het volgende:
[..]
nee dat hoeft niet verplicht...
kheb MySQL Front open hier en deze query:
SELECT MAX(id) FROM tutorial_stats
levert mij netjes 5007 op, dus zeg nou niet dat dat niet werkt
zo'n GROUP BY of HAVING statement is alleen nodig als je je results wil opdelen per kolom zeg maar, dus als je in mijn tabel als voorbeeld, zou willen zien welke tutorials een bepaald aantal views hebben.
ik zit stiekum dit te typen:
SELECT max(id),work_description AS maxid FROM work;
en dan krijg ik:
ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
mjah haha dan klopt het ook wel dat het niet goed isOp woensdag 26 juni 2002 20:15 schreef GiLuX het volgende:
[..]
woops, sorry
ik zit stiekum dit te typen:
SELECT max(id),work_description AS maxid FROM work;
en dan krijg ik:
ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
op het moment dat je d'r meerdere columns in gooit dan moet je die andere functies gebruiken ja
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
zie post hierbovenOp woensdag 26 juni 2002 20:14 schreef SilentThunder het volgende:
[..]
SELECT MAX(id) FROM work
dat moet gewoon werken
sorrysorrysorry
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
npOp woensdag 26 juni 2002 20:16 schreef GiLuX het volgende:
[..]
zie post hierboven
sorrysorrysorry
hehe het werkt dus
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
ja dat wel maar nog steeds niet op deze manier:Op woensdag 26 juni 2002 20:17 schreef SilentThunder het volgende:
[..]
np
hehe het werkt dus
SELECT max(id) AS maxid FROM work WHERE id=maxid GROUP BY id;
of deze:
SELECT max(id),work_description AS maxid FROM work;
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
nee maar dat is toch ook onzin? lijkt mij dan...Op woensdag 26 juni 2002 20:19 schreef GiLuX het volgende:
[..]
ja dat wel maar nog steeds niet op deze manier:
SELECT max(id) AS maxid FROM work WHERE id=maxid GROUP BY id;
of deze:
SELECT max(id),work_description AS maxid FROM work;
als je alleen het hoogste id wilt weten is die oplossing toch afdoende?
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
weer excuses dan..Op woensdag 26 juni 2002 20:20 schreef SilentThunder het volgende:
[..]
nee maar dat is toch ook onzin? lijkt mij dan...
als je alleen het hoogste id wilt weten is die oplossing toch afdoende?
wat ik wil is een boel velden lezen uit de row met de hoogste id in 1 query.
dus niet eerst de hoogste id ophalen en dan in een nieuwe query die row uitlezen,
dit wil ik dus in een query bereiken...
vandaar..
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
mjah excuses nie nodigOp woensdag 26 juni 2002 20:23 schreef GiLuX het volgende:
[..]
weer excuses dan..
wat ik wil is een boel velden lezen uit de row met de hoogste id in 1 query.
dus niet eerst de hoogste id ophalen en dan in een nieuwe query die row uitlezen,
dit wil ik dus in een query bereiken...
vandaar..
ohh op zo'n manier...hehe ik snapte ff nie wat je bedoelde
sja ff uitzoeken hoe dat dan werkt
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
SELECT * FROM work ORDER BY id DESC LIMIT 0,1
maar of dat de meest efficiente is...kijk als dat ding nou 100 records heeft is dat te verwaarlozen
[edit] Als MySQL nou es subqueries ondersteunde...|:(
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
ah, die was nog niet eerder voorbij gekomenOp woensdag 26 juni 2002 20:31 schreef SilentThunder het volgende:
makkelijkste oplossing iig is:
SELECT * FROM work ORDER BY id DESC LIMIT 0,1
maar of dat de meest efficiente is...kijk als dat ding nou 100 records heeft is dat te verwaarlozen
[edit] Als MySQL nou es subqueries ondersteunde...|:(
maar het kan dus niet met MAX() is de algemene conclusie?
tja subqueries zou mooi zijn..
als je de innodb versie gebruikt kan het dan wel?
maarja, innodb is al een stuk mooier maar dan kan je net zo goed met postgres aan de gang gaan, is veel stoerder.
"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who
Verwijderd
1
2
3
4
5
6
7
| SELECT id,
username,
MAX(id) AS maxid
FROM table
GROUP BY id
HAVING id = maxid
LIMIT 1 |
Die LIMIT moet er op de 1 of andere manier uit kunnen denkik...
[edit]
Sorry, deze werkte ook niet, moet je hem nog aflopend sorteren en dan is het normale natuurlijk sneller...
[/edit
met subqueries was het een stuk makkelijkerOp woensdag 26 juni 2002 23:26 schreef zellufs het volgende:
deze werkt ook... maarja, er is volgens mij nog veel aan te optimizen!
code:
1 2 3 4 5 6 7SELECT id, username, MAX(id) AS maxid FROM table GROUP BY id HAVING id = maxid LIMIT 1
Die LIMIT moet er op de 1 of andere manier uit kunnen denkik...
[edit]
Sorry, deze werkte ook niet, moet je hem nog aflopend sorteren en dan is het normale natuurlijk sneller...
[/edit
Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX
Bedankt voor uw constructieve bijdrageOp donderdag 27 juni 2002 09:17 schreef sjako het volgende:
stelletje prutsers
Exact expert nodig?
Verwijderd
NU een betere oplossing!!Op donderdag 27 juni 2002 09:17 schreef sjako het volgende:
stelletje prutsers
Verwijderd
Op donderdag 27 juni 2002 09:48 schreef Crazy_D het volgende:
Bedankt voor uw constructieve bijdrage
Op donderdag 27 juni 2002 10:02 schreef zellufs het volgende:
[..]
NU een betere oplossing!!
ik wil 250 km/uur rijden met mijn fiets.
dat kan niet.
ja, maar als ik nu grotere banden neem.
lukt niet.
dan start ik de motor wel.
die zit niet op een fiets.
wat ik wil zeggen is dat je wel van alles kunt willen, maar je moet leren leven met beperkingen.
MySQL ondersteunt geen sub-queries dus daar hoef je niet over te beginnen.
Je moet wel weten wat je aan het doen bent : zorg dat de syntax goed is (group by functies).
performance.... tsja.
als je het per se in 1 query wilt hebben (want?) dan moet je misschien voor een minder gunstige (?) oplossing kiezen.
zie post Cheatah (!) : hoeveel langzamer gaat dat dan volgens jullie? (order by / max() --> index)
laat dit voortaan achterwege svpOp donderdag 27 juni 2002 09:17 schreef sjako het volgende:
stelletje prutsers
Doet iets met Cloud (MS/IBM)