webForumDet fria alternativet

sorterings problem

Java

21 svar · 829 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#1

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

Medlem sedan juni 200032 967 inlägg
#2

I vanlig ordning: Vilken dbms används?

Medlem sedan sep. 2005833 inlägg
#3

MySQL :bire

Medlem sedan juni 200032 967 inlägg
Medlem sedan sep. 2005833 inlägg
#5

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?

Medlem sedan juni 200032 967 inlägg
#6

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.

Medlem sedan sep. 2005833 inlägg
#7

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.

Medlem sedan juni 200032 967 inlägg
#8

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.

Medlem sedan sep. 2005833 inlägg
#9

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

Medlem sedan juni 200032 967 inlägg
#10

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?

Medlem sedan sep. 2005833 inlägg
#11

oki, har vänt på den, men får felmeddelandet:

Unknown column 'tidKvar' in 'where clause'

WHERE StartDatum <= Now() AND tidKvar >='0'

Medlem sedan juni 200032 967 inlägg
#12

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.

Medlem sedan sep. 2005833 inlägg
#13

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å %.

Medlem sedan juni 200032 967 inlägg
#14

Du har ju inte med något som har med sökning att göra?
Jag ser inget % någonstans?

Medlem sedan sep. 2005833 inlägg
#15

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 % ? %"

Medlem sedan juni 200032 967 inlägg
#16

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.

Medlem sedan sep. 2005833 inlägg
#17

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).

Medlem sedan juni 200032 967 inlägg
#18

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.

Medlem sedan sep. 2005833 inlägg
#19

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();	
}					

}
Medlem sedan juni 200032 967 inlägg
#20

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

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)