webForumDet fria alternativet

sorterings problem

21 svar · 825 visningar · startad av Vinnaren

VinnarenMedlem sedan sep. 2005858 inlägg
#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

@ndersMedlem sedan juni 200026 914 inlägg
#2

I vanlig ordning: Vilken dbms används?

VinnarenMedlem sedan sep. 2005858 inlägg
#3

MySQL :bire

@ndersMedlem sedan juni 200026 914 inlägg
VinnarenMedlem sedan sep. 2005858 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?

@ndersMedlem sedan juni 200026 914 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.

VinnarenMedlem sedan sep. 2005858 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.

@ndersMedlem sedan juni 200026 914 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.

VinnarenMedlem sedan sep. 2005858 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

@ndersMedlem sedan juni 200026 914 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?

VinnarenMedlem sedan sep. 2005858 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'

@ndersMedlem sedan juni 200026 914 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.

VinnarenMedlem sedan sep. 2005858 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å %.

@ndersMedlem sedan juni 200026 914 inlägg
#14

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

@ndersMedlem sedan juni 200026 914 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.

VinnarenMedlem sedan sep. 2005858 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).

@ndersMedlem sedan juni 200026 914 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.

VinnarenMedlem sedan sep. 2005858 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();	
}					

}
@ndersMedlem sedan juni 200026 914 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

Genererad på 370 ms · cache AV · v20260730165559-full.f96bc7eb