Får inte FIRST() att fungera i MySQL, har letat efter motsvarande funktion i MySQL men utan lycka.
FIRST() i MySQL
8 svar · 420 visningar · startad av Pikkenix
Det finns ingen motsvarande funktion. Vad vill du åstadkomma?
Härligt med ett svar iafall!
Det jag vill åstakomma är att få första raden ur en tabell som matchas mot en första tabell... postar SQl-strängen jag användt i Access tidigare som gjort det jag velat åstakomma.
tabla_sqlstring = "SELECT table1.start, table1.stop, table1.information, table1.kategori, table1.titel, table1.kid, FIRST(table2.id) as recid, FIRST(table2.betyg) as betyg FROM table1 LEFT JOIN table2 ON (table2.titel LIKE '%' + table1.titel + '%' AND table2.typ = 2) WHERE table1.start >= #" & datum & "# AND table1.start <= #" & DateAdd("h",29,datum) & "# AND table1.kid = " & kid & " GROUP BY table1.start, table1.stop, table1.information, table1.kategori, table1.titel, table1.kid ORDER BY table1.start"
hoppas du hajar vad jag vill få ut.
Första raden med avseende på vad? Du kan inte förutsätta att raderna i en tabell har en viss ordning, du måste alltid basera resultatet på de värden som finns i kolumnerna.
(table2.titel LIKE '%' + table1.titel + '%'
Om du är tvungen att använda join-villkor av den typen så kommer det att bli väldigt långsamt om du får lite datavolymer i tabellerna.
table1.start >= #" & datum & "#
AND table1.start <= #" & DateAdd("h",29,datum) & "#
kommer inte att fungera i Mysql. Använd de datumfunktioner som finns i SQL.
LIKE-funktionen är nödvändig tyvärr...
Datumfunktionerna är jag medveten inte fungerar, SQL-satsen är som sagt tagen från access.
Du har inte svarat på hur jag gör för att konvertera om FIRST(), vilken som kommer först spelar ingen roll, huvudsaken är att jag endast får en rad från table2.
Ingen annan som kan hjälpa mig?
Tycker inte du har gett tillräckligt med information för att vi ska kunna hjälpa dig.
Vill du ta fram störta värdet, senaste värdet, minsta värdet, eller vad är det du vill åstakomma?
Spelar egentligen ingen roll, är första raden som matchas i joinen jag är ute efter "(table2.titel LIKE '%' + table1.titel + '%' AND table2.typ = 2)". Det viktiga för mig är att table2.id och table2.betyg är från samma rad i databasen och att jag endast får en rad som svar i joinen per rad.
Är möjligt att jag egentligen inte behöver en join, jag behöver bara rader som matchar varandra som jag vill i min join och WHERE-villkor, hittas ingen matchning så vill jag att null returneras för id samt betyg men övriga fält ska fyllas med information.
Det jag vill åstakomma är att jag kan loopa ut alla värden i table1, matchas titel i table1 med titel i table2 med hjälp av en LIKE så skrivs även informationen i table2 ut - annars skrivs endast table1-infon ut.
Har gjort det i nestade sökningar istället men lyckas inte få rätt ändå..
tabla_sqlstring = "SELECT tabla.start, tabla.stop, tabla.information, tabla.kategori, tabla.titel, tabla.kanalid, (SELECT artiklar.id FROM artiklar WHERE artiklar.titel LIKE '%' + tabla.titel + '%' AND artiklar.typ = 2 ORDER BY artiklar.id LIMIT 1), (SELECT artiklar.betyg FROM artiklar WHERE artiklar.titel LIKE '%' + tabla.titel + '%' AND artiklar.typ = 2 ORDER BY artiklar.id LIMIT 1) FROM tabla WHERE tabla.start >= '" & datum & "' AND tabla.start <= '" & DateAdd("h",29,datum) & "' AND tabla.kanalid = " & kanalid & " ORDER BY tabla.start"
Vad som är verkar vara fel är att den inte hämtar värdet "tabla.titel" i de inre satserna: (SELECT artiklar.betyg FROM artiklar WHERE artiklar.titel LIKE '%' + tabla.titel + '%' AND artiklar.typ = 2 ORDER BY artiklar.id LIMIT 1)
Kan ni hjälpa mig med detta?