Avatar billede supermand69 Nybegynder
30. juli 2004 - 13:34 Der er 18 kommentarer og
1 løsning

if i query

Jeg har lidt problemer med at få sorteret mine udtræk korrekt

Min query:
-----------------
SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, MAX(debate2.time) AS last_time
FROM $DB.$table debate, $DB.user user
LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
WHERE debate.user_id=user.id && debate.reply_id=0
GROUP BY debate.thread_id
ORDER BY last_time DESC

I nogle tilfælde kan last_time godt være NULL, og i disse tilfælde skal debate.time sættes i stedet for last_time...
Avatar billede arne_v Ekspert
30. juli 2004 - 13:47 #1
Prøv noget a la:

IF(last_time IS NULL,debate_time,last_time)
Avatar billede supermand69 Nybegynder
30. juli 2004 - 13:50 #2
SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, MAX(debate2.time) AS last_time
FROM $DB.$table debate, $DB.user user
LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
WHERE debate.user_id=user.id && debate.reply_id=0
GROUP BY debate.thread_id
ORDER BY IF(last_time IS NULL,debate_time DESC, last_time DESC)

jeg får fejl?!
Avatar billede arne_v Ekspert
30. juli 2004 - 13:58 #3
Mener du ikke:


ORDER BY IF(last_time IS NULL,debate_time, last_time) DESC

?
Avatar billede supermand69 Nybegynder
30. juli 2004 - 14:00 #4
virker heller ikke?

SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, MAX(debate2.time) AS last_time
FROM $DB.$table debate, $DB.user user
LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
WHERE debate.user_id=user.id && debate.reply_id=0
GROUP BY debate.thread_id
ORDER BY IF(last_time IS NULL, debate_time, last_time) DESC
Avatar billede arne_v Ekspert
30. juli 2004 - 14:05 #5
Hvilken fejl får du ?

Hvilken versin af MySQL ?
Avatar billede supermand69 Nybegynder
30. juli 2004 - 14:06 #6
MySQL 4.0.13-nt

Unknown column 'last_time' in 'order clause'
Avatar billede arne_v Ekspert
30. juli 2004 - 14:46 #7
Og du har

AS last_time

oppe i select listen ?
Avatar billede arne_v Ekspert
30. juli 2004 - 14:47 #8
Prøv evt. at erstatte last_time med MAX(debate2.time) i order by clausen.
Avatar billede supermand69 Nybegynder
30. juli 2004 - 14:48 #9
ja... jeg har copy/pasted min query som den står :)
Avatar billede supermand69 Nybegynder
30. juli 2004 - 14:49 #10
SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, MAX(debate2.time) AS last_time
FROM $DB.$table debate, $DB.user user
LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
WHERE debate.user_id=user.id && debate.reply_id=0
GROUP BY debate.thread_id
ORDER BY IF(MAX(debate2.time) IS NULL, debate_time, MAX(debate2.time)) DESC

får stadig fejl:
Invalid use of group function
Avatar billede supermand69 Nybegynder
30. juli 2004 - 14:53 #11
du kan selv prøve at logge ind på min sql server og se :)

den oprindelige query:
SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, MAX(debate2.time) AS last_time
FROM debate_generelt debate, user user
LEFT JOIN debate_generelt debate2 ON debate.id=debate2.reply_id
WHERE debate.user_id=user.id && debate.reply_id=0
GROUP BY debate.thread_id
ORDER BY last_time DESC

http://mysql.avansis.dk

user: test
pass: readonly
Avatar billede supermand69 Nybegynder
30. juli 2004 - 14:55 #12
desuden har jeg lige et lille tillægs spørgsmål :)

jeg skal også have fat i det id fra den række, hvor enten jeg får last_time eller debate.time
Avatar billede arne_v Ekspert
30. juli 2004 - 15:05 #13
Det sidste må kunne findes med:

SELECT id,MAX(et eller andet) AS n FROM et eller andet GROUP BY id ORDER BY n LIMIT 1
Avatar billede supermand69 Nybegynder
30. juli 2004 - 15:11 #14
kan man ikke smide det ind i den anden query?? ;)
Avatar billede arne_v Ekspert
30. juli 2004 - 15:17 #15
Den her variant kører:

SELECT debate.id, debate.subject, debate.time, COUNT( debate2.reply_id ) AS replies, user.name, MAX( debate2.time ) AS last_time, IFNULL( MAX( debate2.time ) , debate.time )
as temp
FROM debate_genereltdebate, useruser
LEFT JOIN debate_genereltdebate2 ON debate.id = debate2.reply_id
WHERE debate.user_id = user.id && debate.reply_id = 0
GROUP BY debate.thread_id
ORDER BY temp DESC
Avatar billede arne_v Ekspert
30. juli 2004 - 15:18 #16
Der er et eller andet med ORDER BY og IF/ISNULL !?!?
Avatar billede arne_v Ekspert
30. juli 2004 - 15:18 #17
En query kan ikke både returnere mange række rog en række.
Avatar billede supermand69 Nybegynder
01. august 2004 - 21:30 #18
Eller bare sådan her uden "MAX( debate2.time ) AS last_time" da den jo er i IFNULL :p

SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM $DB.$table debate, $DB.user user
    LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
    WHERE debate.user_id=user.id && debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC

ok, du skal have mange tak for hjælpen.. lav et svar ;)
Avatar billede arne_v Ekspert
01. august 2004 - 21:35 #19
svar
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