VinnarenMedlem sedan sep. 2005858 inlägg
Hej
Jag behöver lite hjälp med en SQL sträng.
Har följande SQL:
SELECT auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion
StartDatum innehåller datumet när posten ska börja gällas, datum samt Klockslag.
Langd innehåller antalet dagar (nummer)
Nu undrar jag om det går att sortera samt räkna ut hur lång tid den aktuella posten ska visas?? tex 1dag 1h 55min kvar innan posten blir inaktuell
Tacksam för all hjälp jag kan få :stud
@ndersMedlem sedan juni 200026 914 inlägg
I vanlig ordning: Vilken dbms används?
VinnarenMedlem sedan sep. 2005858 inlägg
@ndersMedlem sedan juni 200026 914 inlägg
VinnarenMedlem sedan sep. 2005858 inlägg
haha, oki. men jag lyckades nog med den "andra" länken tror jag iaf.
fick till denna:
SELECT DATEDIFF(CURDATE(),DATE_ADD(StartDatum, INTERVAL Langd DAY)) as tidKvar, auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion ORDER BY tidKva DESC
men den går inte ner på timmar och minuter. Nu får jag fram tex 5, men jag vill få fram tex 5 dagar, 10 h, 50 min osv.
Hur löser jag det?
@ndersMedlem sedan juni 200026 914 inlägg
Jag hade tänkt att du använder sub_time() för att ta fram antalet minuter. Sedan använder man applikationen / scriptet för att dela upp det i dagar, timmar och minuter.
VinnarenMedlem sedan sep. 2005858 inlägg
det vill inte fungera med sub_time(). Den räknar bara bakåt i sekunder.
SELECT SUBTIME(StartDatum, Langd) as SlutDatum, auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion WHERE StartDatum <= Now();
vet inte redigt hur jag ska få till SUBTIME.
@ndersMedlem sedan juni 200026 914 inlägg
Då kan du väl räkna med sekunder? Det är ju bara lite enkel matematik i applikationen för att dela upp till dagar, timmar och minuter.
Du kan ju alltid använda add_time() om det passar bättre, det är lite svårt att veta eftersom du inte visar vad du har i din tabell.
Läs lite i manualen om datum- och tidsfunktionerna så hittar du säkert rätt.
VinnarenMedlem sedan sep. 2005858 inlägg
Löste det med:
SELECT Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) as tidKvar, auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion WHERE StartDatum <= Now() ORDER BY tidKvar DESC;
(blir till sekunder)
men nu vill jag att inte att de poster som har minus i tidKvar ska hämtas hur löser jag det??
Har provat med tidKvar <=0 men fungerar inte
@ndersMedlem sedan juni 200026 914 inlägg
Om du inte vill att de posterna med minus i tidkvar ska hämtas, då är det väl större än/lika med du ska använda i din WHERE-sats?
VinnarenMedlem sedan sep. 2005858 inlägg
oki, har vänt på den, men får felmeddelandet:
Unknown column 'tidKvar' in 'where clause'
WHERE StartDatum <= Now() AND tidKvar >='0'
@ndersMedlem sedan juni 200026 914 inlägg
Om det inte funkar att ange det skapade namnet får du ange hela uttrycket i where-satsen. Dessutom ska du ju inte ha apostrofer runt nollan, det är ju ett tal.
VinnarenMedlem sedan sep. 2005858 inlägg
nu funkar det:D
en annan liten fråga på samma sql fråga. Jag ska använda den till sök med men den jag har nu vill inte fungera
SELECT Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) as tidKvar, auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion WHERE StartDatum <= Now() AND Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) >=0 AND
det är något fel på %.
@ndersMedlem sedan juni 200026 914 inlägg
Du har ju inte med något som har med sökning att göra?
Jag ser inget % någonstans?
VinnarenMedlem sedan sep. 2005858 inlägg
x( oj, fick visst inte med allt
SELECT Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) as tidKvar, auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion WHERE StartDatum <= Now() AND Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) >=0 AND Rubrik like % ? % OR Beskrivning like % ? %"
@ndersMedlem sedan juni 200026 914 inlägg
Du ska ha apostrofer runt strängar. Dessutom, hur får du dit frågetecknen?
I tillägg, du måste knyta ihop dina OR-villkor för sökningen med parentes, annars räcker det att det sista villkoret går igenom, utan att något av de andra stämmer.
VinnarenMedlem sedan sep. 2005858 inlägg
ok, har nu följande
SELECT Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) as tidKvar, auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion WHERE StartDatum <= Now() AND Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) >=0 AND (Rubrik like '% ? %' OR Beskrivning like '% ? %')
? fås genom:
ps.setString(1, text);
ps.setString(2, text);
men den fungerar inte som det är nu:
Parameter index out of range (1 > number of parameters, which is 0).
@ndersMedlem sedan juni 200026 914 inlägg
Då får du visa någon kod. Vad är det för språk du använder? Ditt sista problem är inte med SQL.
VinnarenMedlem sedan sep. 2005858 inlägg
ok, koden är i java:
public void sok (String katID, String sok) throws Exception
{
int ID = Integer.parseInt(katID);
String text = sok;
if(!(ID==0))
{
String sql = "SELECT Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) as tidKvar, auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion WHERE StartDatum <= Now() AND Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) >=0 AND katID = ? AND (Rubrik like '% ? %' OR Beskrivning like '% ? %')";
conn = getConnection();
ps = conn.prepareStatement(sql);
ps.setInt(1, ID);
ps.setString(2, text);
ps.setString(3, text);
rs = ps.executeQuery();
´ }
else
{
String sql = "SELECT Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) as tidKvar, auktID, Rubrik, StartPris, StartDatum, Langd FROM auktion WHERE StartDatum <= Now() AND Time_To_Sec(TIMEDIFF(DATE_ADD(StartDatum, INTERVAL Langd DAY), Now())) >=0 AND (Rubrik like '% ? %' OR Beskrivning like '% ? %')";
conn = getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1, text);
ps.setString(2, text);
rs = ps.executeQuery();
}
}
@ndersMedlem sedan juni 200026 914 inlägg
Ok.
Jag provar att flytta tråden från SQL-forumet till Javaforumet, så får vi hoppas att du får rätt hjälp där med dina prepared statements.
Mvh