webForumDet fria alternativet

Hur gör jag denna från Access till MySQL?

Databaser & SQLur Databashanterare & SQL

10 svar · 397 visningar · startad av magnusfernstrom

Medlem sedan mars 20033 686 inlägg
Frågan#1

Har följande SQL-sats för att hämta trådar i ett forum, projektet jag nu tagit mig ansvar för använder dock MySQL som databas, och jag har upplevt småproblem med andra SQL-satser p.g.a. det, så jag antar att problemet här också är att det är skrivet för Access, men jag försöker köra det i MySQL. :)

LarsG, eller någon annan, hur gör man för att skriva satsen för MySQL? :e

sql_select_threads = "select  f1.thread_id, f1.thread_name, f1.thread_author_name, f1.thread_author_id, f1.thread_text, thread_reply_id," & _
        " max(iif(f2.thread_date is null,f1.thread_date,f2.thread_date))  " & _
        " from forum_threads f1 left outer join forum_threads f2 " & _
        " on f1.thread_id = f2.thread_reply_id " & _
        " where f1.thread_reply_id = 0 " & _
        " group by  f1.thread_id, f1.thread_name, f1.thread_author_name, f1.thread_author_id, f1.thread_text, thread_reply_id" & _
        " order by 7 desc"
Medlem sedan juni 200032 969 inlägg
#2

Jag hade gett mig på något sånt här:

sql_select_threads = "select  f1.thread_id, f1.thread_name, f1.thread_author_name, f1.thread_author_id, f1.thread_text, thread_reply_id," & _
        " max(CASE WHEN f2.thread_date is null THEN f1.thread_date ELSE f2.thread_date END) " & _
        " from forum_threads f1 left outer join forum_threads f2 " & _
        " on f1.thread_id = f2.thread_reply_id " & _
        " where f1.thread_reply_id = 0 " & _
        " group by f1.thread_id, f1.thread_name, f1.thread_author_name, f1.thread_author_id, f1.thread_text, thread_reply_id" & _
        " order by max(CASE WHEN f2.thread_date is null THEN f1.thread_date ELSE f2.thread_date END) desc"

Du borde också kunna använda ett alias på den skapade kolumnen, så slipper du ha max-uttrycket i order by också.

sql_select_threads = "select  f1.thread_id, f1.thread_name, f1.thread_author_name, f1.thread_author_id, f1.thread_text, thread_reply_id," & _
        " max(CASE WHEN f2.thread_date is null THEN f1.thread_date ELSE f2.thread_date END) AS lastPostDate" & _
        " from forum_threads f1 left outer join forum_threads f2 " & _
        " on f1.thread_id = f2.thread_reply_id " & _
        " where f1.thread_reply_id = 0 " & _
        " group by f1.thread_id, f1.thread_name, f1.thread_author_name, f1.thread_author_id, f1.thread_text, thread_reply_id" & _
        " order by lastPostDate desc"
Medlem sedan mars 20033 686 inlägg
#3

Anders, du är en ängel! :f Jag ska direkt pröva detta när jag sätter igång med sidan igen. :)

Medlem sedan dec. 200012 464 inlägg
#4
CASE WHEN f2.thread_date is null THEN f1.thread_date ELSE f2.thread_date END

kan skrivas som

coalesce(f2.thread_date,f1.thread_date)
Medlem sedan mars 20033 686 inlägg
#5

Argh! Vill ni ha något att bita i? Ni borde i och försig inte ha problem med detta, så bra ni kan detta, men men, jag får inte till det, så jag förklarar problemet och så får vi se om ni fattar hur en SQL-sats skall se ut till den. :)

Jag har olika kategorier (nej sorterade inte via kategorier i den tidigare SQL-frågan, men det ska vara olika kategorier) i ett forum, och i dessa skall givetvis olika trådar hämtas. Sorteringen har ni väl räknat ut, men det ska iallafall sortera efter senaste trådposten, men även efter senaste posten i en tråd, så om en tråd är nypostad skall den ligga högst i forumet, men samtidigt skall en tråd "hoppa upp" om den får ett svar i den.

Följande fält från databasen skall hämtas:

[b]thread_id[/b] - trådens unika ID
[b]thread_name[/b] - rubriken på tråden
[b]thread_author_name[/b] - skaparens namn
[b]thread_author_id[/b] - skaparens ID
[b]thread_text[/b] - själva inlägget/tråden
[b]thread_category[/b] - vilken kategori den tillhör
[b]thread_reply_id[/b] - om det är en tråd, är värdet här noll, om det är ett svar är värdet trådens ID, så det är denna som kopplar ihop hela alltet! 
[b]thread_date[/b] - datum

Allt eftersom kommer fler värden att hämtas, typ som om tråden är av högre prioritet eller låst, men det ska jag nog kunna hämta ut själv, bara jag fattar hur jag ska få det hela att fungera först. :)

Tror det var allt, kanske någon vänlig själ kan skriva ihop en fin liten SQL-sats som fungerar till mitt forum! :D

mvh,

Medlem sedan dec. 20025 483 inlägg
#6

På vilket sätt fungerar inte Anders förslag?

Medlem sedan mars 20033 686 inlägg
#7

Saken är den att jag inte ens vet om själva SQL-satsen var korrekt om jag hade haft Access, då det är ett klipp och klistra-jobb jag gjort från en tidigare sida som är ett år gammal eller nåt, och därför höll jag inte reda på vilka tabeller som var vad osv.

Men visst. :) Detta får jag av @nders:

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

Column 'thread_reply_id' in field list is ambiguous

/forum_category.asp, line 102

På båda satserna.

Medlem sedan dec. 20025 483 inlägg
#8

Anledingen till felmeddelandet är att thread_reply_id tillhör både f1 och f2. Med andra ord måste du tala om från vilken av tabellerna kolumnen skall hämtas. Testa detta:

sql_select_threads = "select  f1.thread_id, f1.thread_name, f1.thread_author_name, f1.thread_author_id, f1.thread_text, f2.thread_reply_id," & _
        " max(coalesce(f2.thread_date, f1.thread_date)) AS lastPostDate" & _
        " from forum_threads f1 left outer join forum_threads f2 " & _
        " on f1.thread_id = f2.thread_reply_id " & _
        " where f1.thread_reply_id = 0 " & _
        " group by f1.thread_id, f1.thread_name, f1.thread_author_name, f1.thread_author_id, f1.thread_text, f2.thread_reply_id" & _
        " order by lastPostDate desc"
Medlem sedan juni 200032 969 inlägg
#9

... och det är ju knappast mitt fel. ;)

Jag tycker nog att det borde ha gett ett felmeddelande i Access-queryn också, men olika dbms rapporterar olika fel (och ibland inte alls.)

(ambiguous är förresten ett störtfint sökord.)
Mvh

Medlem sedan mars 20033 686 inlägg
#10

Tackar PeterS! Skall pröva så fort jag får möjlighet, och @nders: :f (L) Ni andra också. ;)

Medlem sedan mars 20033 686 inlägg
#11

Det fungerade finfint, tack alla som hjälpte mig! :)

151 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)