Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hvordan udtrækker man "intervaller"?

8 views
Skip to first unread message

Jørn Andersen

unread,
Jan 22, 2013, 1:42:00 PM1/22/13
to
Hej,

Jeg vedligeholder databasen for et site, der bl.a. udgiver en avis.
For hvert nr. af avisen kan man påføre en ansvarshavende redaktør.

Og så kunne det være interessant at have et overblik over, hvem der
har været redaktør i hvilke perioder - altså fx:
Nr. 1-25: NN
Nr. 25-30: KK
Nr. 31.45: PP
osv.

Er der en mdåe at gøre det med SQL, altså uden at skulle loope sig
igennem det (med ASP/PHP)?

Databasen er p.t. en MS Access, men det bliver senere flyttet til
MySql.

Der foresvæver mig et eller andte med TRANSFORM, men det er vist lidt
ud over mine udmiddelbare evner ...

Oplysningerne er i to tabeller:
tblNumre med bl.a.
Nr
RedaktoerId
og tblRedaktoer med
RedaktoerId
Redaktoer (text)

Mvh. Jørn
X-FUT: dk.edb.database, dk.edb.database.ms-access
FUT: dk.edb.database

--
Jørn Andersen
http://socialister.dk
http://marxisme.dk

JHB

unread,
Jan 22, 2013, 4:12:14 PM1/22/13
to

"Jørn Andersen" <jo...@jorna.dk> skrev i en meddelelse news:tpmtf8tk2mstnu84h...@4ax.com...
Hej Jørn,
er det sådan du tænker dig det skal vises, eller må du prøve at skitser det!
Prøv

SELECT Min([Nr]) & "-" & Max([Nr]) AS Numre, tblNumre.RedaktoerId
FROM tblNumre
GROUP BY tblNumre.RedaktoerId
ORDER BY Min([Nr]) & "-" & Max([Nr]);

Mvh
JHB

Jørn Andersen

unread,
Jan 22, 2013, 5:47:31 PM1/22/13
to
On Tue, 22 Jan 2013 22:12:14 +0100, "JHB" <jhb...@hotmail.com> wrote:

>er det sådan du tænker dig det skal vises, eller må du prøve at skitser det!
>Prøv
>
>SELECT Min([Nr]) & "-" & Max([Nr]) AS Numre, tblNumre.RedaktoerId
>FROM tblNumre
>GROUP BY tblNumre.RedaktoerId
>ORDER BY Min([Nr]) & "-" & Max([Nr]);

Tusind tak,
Jeg havde ikke troet det bare kunne laves med en GROUP BY, men du fik
mig på rette spor:
SELECT Min([Nr]) & "-" & Max([Nr]) AS Numre, tblRedaktoer.Redaktoer
FROM tblNumre INNER JOIN tblRedaktoer ON tblNumre.RedaktoerId =
tblRedaktoer.RedaktoerId
GROUP BY tblRedaktoer.Redaktoer
ORDER BY Min(tblNumre.[Nr]);

Så får jeg dels selve redaktør-navnet og ikke kun Id'et.
Desuden er jeg nødt til at sortere på Min([Nr]) og ikke på:
Min([Nr]) & "-" & Max([Nr])
som er en tekststreng og derfor sorterer 105 før 35 (fx).

Mange tak for hjælpen!

Mvh. Jørn

Leif Neland

unread,
Jan 22, 2013, 6:06:16 PM1/22/13
to
Jørn Andersen tastede følgende:
Det giver so vidt jeg kan se problemer med hvis en redaktør har haft
flere perioder. Ikke at jeg har en læsning...

Leif

--
Husk kørelys bagpå, hvis din bilfabrikant har taget den idiotiske
beslutning at undlade det.


Jørn Andersen

unread,
Jan 22, 2013, 6:18:14 PM1/22/13
to
On Wed, 23 Jan 2013 00:06:16 +0100, Leif Neland <le...@neland.dk>
wrote:

>> SELECT Min([Nr]) & "-" & Max([Nr]) AS Numre, tblRedaktoer.Redaktoer
>> FROM tblNumre INNER JOIN tblRedaktoer ON tblNumre.RedaktoerId =
>> tblRedaktoer.RedaktoerId
>> GROUP BY tblRedaktoer.Redaktoer
>> ORDER BY Min(tblNumre.[Nr]);
>>
>> Så får jeg dels selve redaktør-navnet og ikke kun Id'et.
>> Desuden er jeg nødt til at sortere på Min([Nr]) og ikke på:
>> Min([Nr]) & "-" & Max([Nr])
>> som er en tekststreng og derfor sorterer 105 før 35 (fx).
<snip>

>Det giver so vidt jeg kan se problemer med hvis en redaktør har haft
>flere perioder. Ikke at jeg har en læsning...

Gør JHB's udgave også?
Ja, undskyld, men mig og så joinede queries bliver vist aldrig rigtigt
gode venner ;-)

Jeg er endnu ikke helt klar over, om der er nogen, der har flere
perioder, men det kan sagtens være.

Er der en løsning på det?

Leif Neland

unread,
Jan 22, 2013, 7:10:14 PM1/22/13
to
Efter mange tanker skrev Jørn Andersen:
> Hej,
>
> Jeg vedligeholder databasen for et site, der bl.a. udgiver en avis.
> For hvert nr. af avisen kan man påføre en ansvarshavende redaktør.
>
> Og så kunne det være interessant at have et overblik over, hvem der
> har været redaktør i hvilke perioder - altså fx:
> Nr. 1-25: NN
> Nr. 25-30: KK
> Nr. 31.45: PP
> osv.
>
> Er der en mdåe at gøre det med SQL, altså uden at skulle loope sig
> igennem det (med ASP/PHP)?
>
Er det snyd at have en procedure i SQL, der looper igennem og
returnerer resultatet som en tabel? :-)

Ellers kunne jeg forestille mig noget med at man joiner tabellen med
sig selv for at finde den mindste nr, der er større end dette med en
anden redaktør.

Dette grouper man så over slutnr for at finde det mindste startnr pr
slutnr.

Men det er det vist for sent på natten til at tænke klart over :-)

JHB

unread,
Jan 23, 2013, 12:42:59 AM1/23/13
to

"Jørn Andersen" <jo...@jorna.dk> skrev i en meddelelse news:l57uf89md7ifbpdg9...@4ax.com...
>
> Gør JHB's udgave også?
> Ja, undskyld, men mig og så joinede queries bliver vist aldrig rigtigt
> gode venner ;-)
>
> Jeg er endnu ikke helt klar over, om der er nogen, der har flere
> perioder, men det kan sagtens være.
>
> Er der en løsning på det?
>
> --
Ja det gør min løsning også - den tager jo kun det mindste nr. samt det højeste nr., ligemeget om der har været andre i mellemtiden!
Eneste løsning er at loop, Leif ser ud til at være inde på noget af det rigtige.
Der er vel ikke tilfældigvis en dato tilgængelig, for det er vel over flere år, eller hvad?

Mvh
JHB

Jørn Andersen

unread,
Jan 23, 2013, 1:25:36 AM1/23/13
to
On Wed, 23 Jan 2013 06:42:59 +0100, "JHB" <jhb...@hotmail.com> wrote:


>Ja det gør min løsning også - den tager jo kun det mindste nr. samt det højeste nr., ligemeget om der har været andre i mellemtiden!

Jo, jeg tror jeg har fattet, hvorfor der er det problem :-)

>Eneste løsning er at loop, Leif ser ud til at være inde på noget af det rigtige.
Der er for så vidt heller ikke noget i vejen for at loope i mit
PHP-script - så mange drejer det sig heller ikke om (godt 300 numre
p.t.), og det er næppe heller et script, der vil blive kaldt særligt
tit.
Jeg lærte bare en gang, at man skal "lade databasen gøre arbejdet", så
derfor mit spørgsmål ...

>Der er vel ikke tilfældigvis en dato tilgængelig, for det er vel over flere år, eller hvad?

Jo, der er en udgivelses-dato i samme tabel som avis-nummeret. Og ja,
det er over adskillige år.

Mvh. Jørn

Leif Neland

unread,
Jan 23, 2013, 9:30:25 AM1/23/13
to
Følgende er skrevet af Jørn Andersen:

> Jeg lærte bare en gang, at man skal "lade databasen gøre arbejdet", så
> derfor mit spørgsmål ...
>
Ja, men du kan jo scripte i databasen :-)

Jørn Andersen

unread,
Jan 23, 2013, 11:52:46 AM1/23/13
to
On Wed, 23 Jan 2013 15:30:25 +0100, Leif Neland <le...@neland.dk>
wrote:

>Følgende er skrevet af Jørn Andersen:
>
>> Jeg lærte bare en gang, at man skal "lade databasen gøre arbejdet", så
>> derfor mit spørgsmål ...
>>
>Ja, men du kan jo scripte i databasen :-)

Tænker du på noget VBA i MS Access, som så skal konverteres til noget
noget andet, når det skal i MySql? Eller?

Umiddelbart er nok mest på bare at loope mig igennem med PHP, da det
ikke er noget, der behøver at ressource-optimeres ret meget ... Det
vil også være ukompliceret at ændre, når det hele engang skal flyttes
til MySql.

Arne Vajhøj

unread,
Jan 23, 2013, 10:13:51 PM1/23/13
to
On 1/23/2013 1:25 AM, Jørn Andersen wrote:
> On Wed, 23 Jan 2013 06:42:59 +0100, "JHB" <jhb...@hotmail.com> wrote:
>> Eneste løsning er at loop, Leif ser ud til at være inde på noget af det rigtige.
> Der er for så vidt heller ikke noget i vejen for at loope i mit
> PHP-script - så mange drejer det sig heller ikke om (godt 300 numre
> p.t.), og det er næppe heller et script, der vil blive kaldt særligt
> tit.
> Jeg lærte bare en gang, at man skal "lade databasen gøre arbejdet", så
> derfor mit spørgsmål ...

Reglen bør nok hedde "man skal lade database gøre arbejdet, hvis det er
arbejde som er naturligt for en database".

Så hvis problemet løses med join, selection og projection, så skal
det nok laves i databasen.

Men hvis det løses med løkke, if og switch/case, så skal det nok
laves i applikationen.

Arne



Arne Vajhøj

unread,
Jan 23, 2013, 10:21:18 PM1/23/13
to
On 1/23/2013 11:52 AM, Jørn Andersen wrote:
> On Wed, 23 Jan 2013 15:30:25 +0100, Leif Neland <le...@neland.dk>
> wrote:
>
>> Følgende er skrevet af Jørn Andersen:
>>
>>> Jeg lærte bare en gang, at man skal "lade databasen gøre arbejdet", så
>>> derfor mit spørgsmål ...
>>>
>> Ja, men du kan jo scripte i databasen :-)
>
> Tænker du på noget VBA i MS Access, som så skal konverteres til noget
> noget andet, når det skal i MySql? Eller?

MS Access og VBA er lidt speciel.

Men de fleste databaser henvendt til lad os sige lidt
større brug understøtter SP og UDF og diverse
programmerings sprog.

Oracle DB - Java
IBM DB2 - Java
MS SQLServer - .NET
Sybase - Java
PostgreSQL - Tcl + Perl + Python

(derudover understøtter Java databaserne Derby,
HSQLDB etc. også Java, men så er vi nede i
de mindre database brug igen)

Arne

Leif Neland

unread,
Jan 24, 2013, 12:34:11 AM1/24/13
to
Efter mange tanker skrev Arne Vajhøj:
Det kommer nu an på så meget.

Jeg har ihvertfald fået noget ned på under 1/10 tid ved at flytte noget
løkke-halløj fra php til sql.

Arne Vajhøj

unread,
Jan 24, 2013, 6:17:51 PM1/24/13
to
On 1/24/2013 12:34 AM, Leif Neland wrote:
> Efter mange tanker skrev Arne Vajhøj:
>> On 1/23/2013 1:25 AM, Jørn Andersen wrote:
>>> Jeg lærte bare en gang, at man skal "lade databasen gøre arbejdet", så
>>> derfor mit spørgsmål ...
>>
>> Reglen bør nok hedde "man skal lade database gøre arbejdet, hvis det er
>> arbejde som er naturligt for en database".
>>
>> Så hvis problemet løses med join, selection og projection, så skal
>> det nok laves i databasen.
>>
>> Men hvis det løses med løkke, if og switch/case, så skal det nok
>> laves i applikationen.
>
> Det kommer nu an på så meget.
>
> Jeg har ihvertfald fået noget ned på under 1/10 tid ved at flytte noget
> løkke-halløj fra php til sql.

Medmindre du lavede et database kald inden i den løkke, så vil jeg
kalde det for usædvaneligt.

Arne


Arne Vajhøj

unread,
Jan 24, 2013, 9:02:29 PM1/24/13
to
Hvis man skal gøre det ville jeg vælge et andet sprog end *SQL, hvis
den pågældende database understøttede noget sådant.

Arne


Leif Neland

unread,
Jan 24, 2013, 9:03:54 PM1/24/13
to
Arne Vajhᅵj udtrykte prᅵcist:
> On 1/24/2013 12:34 AM, Leif Neland wrote:
>> Efter mange tanker skrev Arne Vajhᅵj:
>>> On 1/23/2013 1:25 AM, Jᅵrn Andersen wrote:
>>>> Jeg lᅵrte bare en gang, at man skal "lade databasen gᅵre arbejdet", sᅵ
>>>> derfor mit spᅵrgsmᅵl ...
>>>
>>> Reglen bᅵr nok hedde "man skal lade database gᅵre arbejdet, hvis det er
>>> arbejde som er naturligt for en database".
>>>
>>> Sᅵ hvis problemet lᅵses med join, selection og projection, sᅵ skal
>>> det nok laves i databasen.
>>>
>>> Men hvis det lᅵses med lᅵkke, if og switch/case, sᅵ skal det nok
>>> laves i applikationen.
>>
>> Det kommer nu an pᅵ sᅵ meget.
>>
>> Jeg har ihvertfald fᅵet noget ned pᅵ under 1/10 tid ved at flytte noget
>> lᅵkke-hallᅵj fra php til sql.
>
> Medmindre du lavede et database kald inden i den lᅵkke, sᅵ vil jeg
> kalde det for usᅵdvaneligt.
>
> Arne

Det var netop det, jeg gjorde.

Trak data ud af en tabel, og for hver rᅵkke, lave en ny forespᅵrgsel,
behandle den og skrive tilbage til db.

Det var fᅵr det gik op for mig, hvor meget man kan fᅵ db'en til.

--
Husk kᅵrelys bagpᅵ, hvis din bilfabrikant har taget den idiotiske
beslutning at undlade det.


0 new messages