Thread View: be.comp.programming
12 messages
12 total messages
Started by Steven
Thu, 27 Oct 2005 14:25
Sql vraagje
Author: Steven
Date: Thu, 27 Oct 2005 14:25
Date: Thu, 27 Oct 2005 14:25
20 lines
1584 bytes
1584 bytes
Hallo, ik heb een vraagje ivm queries. Stel, je hebt een tabel met een aantal records. De tabel heeft een veld id. Ik wil nu van die tabel 3 records: het record met id = X, het record dat, geordend volgens id, juist voor X komt, en het record er juist na. Je kan dit uiteraard oplossen met meerdere queries, maar ik vroeg me toch af of het niet kon met slechts 1 query. Merk op dat de id's uniek zijn, maar niet noodzakelijk opeenvolgend. Je kan in de tabel bijvoorbeeld hebben: 1, 2, 17, 18, 19, 25, 26 als X = 19, dan zou je 18, 19 en 25 moeten krijgen als oplossing. Iemand een oplossing ? Groetjes, Steven
Re: Sql vraagje
Author: Ludo
Date: Thu, 27 Oct 2005 14:30
Date: Thu, 27 Oct 2005 14:30
23 lines
1884 bytes
1884 bytes
Steven schreef: > Hallo, > > ik heb een vraagje ivm queries. > Stel, je hebt een tabel met een aantal records. De tabel heeft een veld > id. Ik wil nu van die tabel 3 records: het record met id = X, het record > dat, geordend volgens id, juist voor X komt, en het record er juist na. > > Je kan dit uiteraard oplossen met meerdere queries, maar ik vroeg me > toch af of het niet kon met slechts 1 query. > > Merk op dat de id's uniek zijn, maar niet noodzakelijk opeenvolgend. > > Je kan in de tabel bijvoorbeeld hebben: 1, 2, 17, 18, 19, 25, 26 > als X = 19, dan zou je 18, 19 en 25 moeten krijgen als oplossing. > > Iemand een oplossing ? > > Groetjes, > > Steven Select * From Jouw_Tabel Where X < 19 ....
Re: Sql vraagje
Author: Steven
Date: Thu, 27 Oct 2005 15:14
Date: Thu, 27 Oct 2005 15:14
36 lines
1990 bytes
1990 bytes
Ludo wrote: > Steven schreef: > >> Hallo, >> >> ik heb een vraagje ivm queries. >> Stel, je hebt een tabel met een aantal records. De tabel heeft een >> veld id. Ik wil nu van die tabel 3 records: het record met id = X, het >> record dat, geordend volgens id, juist voor X komt, en het record er >> juist na. >> >> Je kan dit uiteraard oplossen met meerdere queries, maar ik vroeg me >> toch af of het niet kon met slechts 1 query. >> >> Merk op dat de id's uniek zijn, maar niet noodzakelijk opeenvolgend. >> >> Je kan in de tabel bijvoorbeeld hebben: 1, 2, 17, 18, 19, 25, 26 >> als X = 19, dan zou je 18, 19 en 25 moeten krijgen als oplossing. >> >> Iemand een oplossing ? >> >> Groetjes, >> >> Steven > > > Select * From Jouw_Tabel Where X < 19 .... Beste, Ik denk niet dat je het probleem begrijpt. En mocht je het toch begrepen hebben, dan begrijp alleszins jouw oplossing niet. Toch bedankt. Groetjes, Steven
Re: Sql vraagje
Author: Ludo
Date: Thu, 27 Oct 2005 15:31
Date: Thu, 27 Oct 2005 15:31
26 lines
1765 bytes
1765 bytes
> Beste,
>
> Ik denk niet dat je het probleem begrijpt. En mocht je het toch begrepen
> hebben, dan begrijp alleszins jouw oplossing niet. Toch bedankt.
>
> Groetjes,
>
> Steven
Var A,B,X := Integer;
Query1: TQuery;
begin
Query1 := TQuery.Create(Self);
Query1.SqlConnection := SqlConnection1;
X := 19;
A := X - 1;
B = X + 1;
With Query1 do
begin
Sql.Clear;
Sql.Add('Select * From Jouw_Tabel Where Id Between A and B' Order
By Id');
Open;
end;
Re: Sql vraagje
Author: Steven
Date: Thu, 27 Oct 2005 20:03
Date: Thu, 27 Oct 2005 20:03
28 lines
1902 bytes
1902 bytes
Ludo wrote:
> Var A,B,X := Integer;
> Query1: TQuery;
>
> begin
> Query1 := TQuery.Create(Self);
> Query1.SqlConnection := SqlConnection1;
> X := 19;
> A := X - 1;
> B = X + 1;
> With Query1 do
> begin
> Sql.Clear;
> Sql.Add('Select * From Jouw_Tabel Where Id Between A and B' Order By
> Id');
> Open;
> end;
>
>
Ik denk niet dat dat correct is. Je bent immers niet zeker of het id met
X - 1 bestaat. het id dat net voor 19 komt, is kleiner dan 19, maar je
weet de exacte waarde niet. De id's zijn niet noodzakelijk opeenvolgend.
Toch bedankt. Nog suggesties?
Groetjes,
Steven
Re: Sql vraagje
Author: John Bokma
Date: Thu, 27 Oct 2005 21:58
Date: Thu, 27 Oct 2005 21:58
17 lines
1713 bytes
1713 bytes
Steven <user@example.net> wrote:
> Ik denk niet dat dat correct is. Je bent immers niet zeker of het id
> met X - 1 bestaat. het id dat net voor 19 komt, is kleiner dan 19,
> maar je weet de exacte waarde niet. De id's zijn niet noodzakelijk
> opeenvolgend. Toch bedankt. Nog suggesties?
Waarom zit je tabel zo inelkaar (just curious)?
Je kan met een ordening op ID en een limit wel id, plus de volgende vinden
(limit op 2 zetten), maar geen idee hoe je in 1x alle drie op kan halen.
--
John Bokma
Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: Sql vraagje
Author: Ludo
Date: Thu, 27 Oct 2005 22:18
Date: Thu, 27 Oct 2005 22:18
24 lines
1904 bytes
1904 bytes
Het lukt wel, maar dan wel in 2 slagen : ( volgens mij dan toch ) :
Var A,B,X := Integer;
Query1: TQuery;
begin
Query1 := TQuery.Create(Self);
Query1.SqlConnection := SqlConnection1;
X := 19;
With Query1 do
begin
Sql.Clear;
Sql.Add('Select * From Jouw_Tabel Order By Id');
Open;
FindKey([X]);
MoveBy(-1);
A := FieldByName('Id').AsInteger;
MoveBy(2);
B := FieldByName('Id').AsInteger;
Close;
Sql.Clear;
Sql.Add('Select * From Jouw_Tabel Where Id Between A and B' Order By ..
Open;
end;
Re: Sql vraagje
Author: Ludo
Date: Thu, 27 Oct 2005 22:41
Date: Thu, 27 Oct 2005 22:41
34 lines
2155 bytes
2155 bytes
Met een verbetering erbij :
Het lukt wel, maar dan wel in 2 slagen : ( volgens mij dan toch ) :
Var A,B,X := Integer;
Query1: TQuery;
begin
Query1 := TQuery.Create(Self);
Query1.SqlConnection := SqlConnection1;
X := 19;
With Query1 do
begin
Sql.Clear;
Sql.Add('Select * From Jouw_Tabel Order By Id');
Open;
if FindKey([X]) then
begin
MoveBy(-1);
A := FieldByName('Id').AsInteger;
MoveBy(2);
B := FieldByName('Id').AsInteger;
Close;
Sql.Clear;
Sql.Add('Select * From Jouw_Tabel Where Id Between A and B' Order By ..
Open;
end
else
begin
ShowMessage('Geen resultaat gevonden ..');
Close;
Free;
end:
end;
Re: Sql vraagje
Author: Wim Godden
Date: Fri, 28 Oct 2005 00:03
Date: Fri, 28 Oct 2005 00:03
59 lines
2088 bytes
2088 bytes
In 1 query kan dit niet, met een subquery wel :
select
*
from
tabelnaam
where
id=(
select
id
from
tabelnaam
where
id<X
order by
id desc
limit
1
)
or
id=X
or
id=(
select
id
from
tabelnaam
where
id>X
order by
id asc
limit
1
)
order by
id asc
Steven wrote:
> Hallo,
>
> ik heb een vraagje ivm queries.
> Stel, je hebt een tabel met een aantal records. De tabel heeft een veld
> id. Ik wil nu van die tabel 3 records: het record met id = X, het record
> dat, geordend volgens id, juist voor X komt, en het record er juist na.
>
> Je kan dit uiteraard oplossen met meerdere queries, maar ik vroeg me
> toch af of het niet kon met slechts 1 query.
>
> Merk op dat de id's uniek zijn, maar niet noodzakelijk opeenvolgend.
>
> Je kan in de tabel bijvoorbeeld hebben: 1, 2, 17, 18, 19, 25, 26
> als X = 19, dan zou je 18, 19 en 25 moeten krijgen als oplossing.
>
> Iemand een oplossing ?
>
> Groetjes,
>
> Steven
Re: Sql vraagje
Author: Steven
Date: Fri, 28 Oct 2005 09:43
Date: Fri, 28 Oct 2005 09:43
31 lines
2211 bytes
2211 bytes
John Bokma wrote: > Steven <user@example.net> wrote: > > >>Ik denk niet dat dat correct is. Je bent immers niet zeker of het id >>met X - 1 bestaat. het id dat net voor 19 komt, is kleiner dan 19, >>maar je weet de exacte waarde niet. De id's zijn niet noodzakelijk >>opeenvolgend. Toch bedankt. Nog suggesties? > > > Waarom zit je tabel zo inelkaar (just curious)? > > Je kan met een ordening op ID en een limit wel id, plus de volgende vinden > (limit op 2 zetten), maar geen idee hoe je in 1x alle drie op kan halen. > Dat is gewoon een tabel met records, met een auto_increment op het id, en die records kan je verwijderen, daarom dat de id's niet noodzakelijk opeenvolgend zijn. Met subqueries lukt het idd wel, maar dat ondersteunt mijn versie van MySQL niet. Enfin, het is nu wel opgelost met meerdere queries, dus 't is geen ramp. Ik wou gewoon even weten als er hier iemand toch een oplossing had. Iedereen bedankt voor zijn bijdrage. Groetjes, Steven
Re: Sql vraagje
Author: John Bokma
Date: Fri, 28 Oct 2005 11:09
Date: Fri, 28 Oct 2005 11:09
24 lines
2028 bytes
2028 bytes
Steven <user@example.net> wrote:
> John Bokma wrote:
>> Waarom zit je tabel zo inelkaar (just curious)?
>
> Dat is gewoon een tabel met records, met een auto_increment op het id,
> en die records kan je verwijderen, daarom dat de id's niet
> noodzakelijk opeenvolgend zijn.
Ok, afhankelijk van hoevaak dingen gewist worden, en hoe snel je het zoeken
wilt hebben kan je b.v. de vorige en voorgaande relatie in het record zelf
opslaan. Dit brengt wel extra last met zich mee als je gaat wissen, maar
als het opzoeken heel vaak voorkomt kan dit een stuk sneller zijn.
> Enfin, het is nu wel opgelost met meerdere queries,
Wel opletten dat er dan net eentje (record) gewist kan zijn, oops...
--
John Bokma
Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: Sql vraagje
Author: Kristoffel
Date: Fri, 28 Oct 2005 23:27
Date: Fri, 28 Oct 2005 23:27
10 lines
1591 bytes
1591 bytes
Steven wrote: > > Met subqueries lukt het idd wel, maar dat ondersteunt mijn versie van > MySQL niet. > Tijd voor een upgrade naar MySQL 4.1 of MySQL 5.0 -- Kristoffel
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads