/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
3 tabels select
Fra : Martin


Dato : 03-05-06 08:13

Jeg har et lille problem med at finde en løsning på mit statement.

Beskrivelse af mine 3 tabeller.

tbl_item = varer produkter
ID
navn
normal_pris

tbl_campaign = kampagner
ID
navn
from_date (datetime)
to_date (datetime)

tbl_campaignitems = varer til kampagne
ID
item_ID
campaign_ID
kampagne_pris

Mit ønske er:
at få varens navn og ID
at få de x antal varer ud med størst forskel mellem normal_pris og
kampagne_pris (denne er ikke et krav, da jeg kan lave det med PHP, hvis
det skulle være)
og til sidst, at kun få varer ud der ER en kampagne på :)

Det hele kører på MySQL 4.0.24, sammen med PHP 5 :)

 
 
Carsten Pedersen (03-05-2006)
Kommentar
Fra : Carsten Pedersen


Dato : 03-05-06 17:20

Hej, Martin!

"Martin" <maa@scandesigns.dk> skrev i en meddelelse
news:44585800$0$15785$14726298@news.sunsite.dk...
> Jeg har et lille problem med at finde en løsning på mit statement.
>
> Beskrivelse af mine 3 tabeller.
>
> tbl_item = varer produkter
> ID
> navn
> normal_pris
>
> tbl_campaign = kampagner
> ID
> navn
> from_date (datetime)
> to_date (datetime)
>
> tbl_campaignitems = varer til kampagne
> ID
> item_ID
> campaign_ID
> kampagne_pris
>
> Mit ønske er:
> at få varens navn og ID
> at få de x antal varer ud med størst forskel mellem normal_pris og
> kampagne_pris (denne er ikke et krav, da jeg kan lave det med PHP, hvis
> det skulle være)
> og til sidst, at kun få varer ud der ER en kampagne på :)
>
> Det hele kører på MySQL 4.0.24, sammen med PHP 5 :)

Prøv med

SELECT it.ID, it.Navn, (it.normal_pris - ci.kampagne_pris) AS Forskel
FROM tbl_item it, tbl_campaignitems ci
WHERE it.ID = ci.item_ID
ORDER BY Forskel DESC
LIMIT 0,x


Mvh


C@rsten



Martin (03-05-2006)
Kommentar
Fra : Martin


Dato : 03-05-06 17:39

Carsten Pedersen wrote:
> Hej, Martin!

Hej Carsten.

>>
>> tbl_campaign = kampagner
>> ID
>> navn
>> from_date (datetime)
>> to_date (datetime)
>>

> SELECT it.ID, it.Navn, (it.normal_pris - ci.kampagne_pris) AS Forskel
> FROM tbl_item it, tbl_campaignitems ci
> WHERE it.ID = ci.item_ID
> ORDER BY Forskel DESC
> LIMIT 0,x

Hold da op, jeg vidste godt nok ikke man kunne bruge en select statement
i sorteringen. Den er noteret i baghovedet.

Dog er der lige én ting med dit statement.
Jeg har prøvet at indføre
WHERE it.ID = ci.item_ID AND (NOW() BETWEEN tc.from_date AND tc.to_date)
(og selvfølgelig smidt en ekstra ind i FROM)
Jeg får desværre ingen fejl, men heller ikke noget output? - Burde det
ikk virke som ovenstående?

PS: Jeg får supermange resultater ud af dit statement
(læs: Alle de items ud der er en kampagne på, hvor både kampagnen først
skulle starte til vinter, og hvor kampagnen endte sidste år)

Michael Zedeler (03-05-2006)
Kommentar
Fra : Michael Zedeler


Dato : 03-05-06 18:18

Martin wrote:
> Carsten Pedersen wrote:
>
>> Hej, Martin!
>
>
> Hej Carsten.
>
>>>
>>> tbl_campaign = kampagner
>>> ID
>>> navn
>>> from_date (datetime)
>>> to_date (datetime)
>>>
>
>> SELECT it.ID, it.Navn, (it.normal_pris - ci.kampagne_pris) AS Forskel
>> FROM tbl_item it, tbl_campaignitems ci
>> WHERE it.ID = ci.item_ID
>> ORDER BY Forskel DESC
>> LIMIT 0,x
>
>
> Hold da op, jeg vidste godt nok ikke man kunne bruge en select statement
> i sorteringen. Den er noteret i baghovedet.
>
> Dog er der lige én ting med dit statement.
> Jeg har prøvet at indføre
> WHERE it.ID = ci.item_ID AND (NOW() BETWEEN tc.from_date AND tc.to_date)
> (og selvfølgelig smidt en ekstra ind i FROM)
> Jeg får desværre ingen fejl, men heller ikke noget output? - Burde det
> ikk virke som ovenstående?

Så skriv din egen version her, så det er nemmere at finde fejlen.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Martin (03-05-2006)
Kommentar
Fra : Martin


Dato : 03-05-06 18:35

Michael Zedeler wrote:
> Martin wrote:
>> Carsten Pedersen wrote:
>>
>>> Hej, Martin!
>>
>>
>> Hej Carsten.
>>
>>>>
>>>> tbl_campaign = kampagner
>>>> ID
>>>> navn
>>>> from_date (datetime)
>>>> to_date (datetime)
>>>>
>>
>>> SELECT it.ID, it.Navn, (it.normal_pris - ci.kampagne_pris) AS Forskel
>>> FROM tbl_item it, tbl_campaignitems ci
>>> WHERE it.ID = ci.item_ID
>>> ORDER BY Forskel DESC
>>> LIMIT 0,x
>>
>>
>> Hold da op, jeg vidste godt nok ikke man kunne bruge en select
>> statement i sorteringen. Den er noteret i baghovedet.
>>
>> Dog er der lige én ting med dit statement.
>> Jeg har prøvet at indføre
>> WHERE it.ID = ci.item_ID AND (NOW() BETWEEN tc.from_date AND tc.to_date)
>> (og selvfølgelig smidt en ekstra ind i FROM)
>> Jeg får desværre ingen fejl, men heller ikke noget output? - Burde det
>> ikk virke som ovenstående?
>
> Så skriv din egen version her, så det er nemmere at finde fejlen.

Den kommer her så :)

SELECT it.ID, it.Navn, (it.normal_pris - ci.kampagne_pris) AS Forskel
FROM tbl_item it, tbl_campaignitems ci, tbl_campaign tc
WHERE
it.ID = ci.item_ID AND
(NOW() BETWEEN tc.from_date AND tc.to_date)
ORDER BY Forskel DESC
LIMIT 0,10

>
> Mvh. Michael.

Carsten Pedersen (04-05-2006)
Kommentar
Fra : Carsten Pedersen


Dato : 04-05-06 17:27

Hej, Martin!

"Martin" <news@natten-i.dk> skrev i en meddelelse
news:4458dca0$0$15787$14726298@news.sunsite.dk...
> Carsten Pedersen wrote:
>> Hej, Martin!
>
> Hej Carsten.
>
>>>
>>> tbl_campaign = kampagner
>>> ID
>>> navn
>>> from_date (datetime)
>>> to_date (datetime)
>>>
>
>> SELECT it.ID, it.Navn, (it.normal_pris - ci.kampagne_pris) AS Forskel
>> FROM tbl_item it, tbl_campaignitems ci
>> WHERE it.ID = ci.item_ID
>> ORDER BY Forskel DESC
>> LIMIT 0,x
>
> Hold da op, jeg vidste godt nok ikke man kunne bruge en select statement i
> sorteringen. Den er noteret i baghovedet.
>
> Dog er der lige én ting med dit statement.
> Jeg har prøvet at indføre
> WHERE it.ID = ci.item_ID AND (NOW() BETWEEN tc.from_date AND tc.to_date)
> (og selvfølgelig smidt en ekstra ind i FROM)
> Jeg får desværre ingen fejl, men heller ikke noget output? - Burde det ikk
> virke som ovenstående?
>
> PS: Jeg får supermange resultater ud af dit statement
> (læs: Alle de items ud der er en kampagne på, hvor både kampagnen først
> skulle starte til vinter, og hvor kampagnen endte sidste år)

Det er fordi NOW() returnerer ikke blot en dato, men også et klokkeslet.
Brug CURDATE(), CURRENT_DATE eller CURRENT_DATE() i stedet. Det er lige
meget hvilken, da de returnerer det samme.


Mvh


C@rsten



Martin (05-05-2006)
Kommentar
Fra : Martin


Dato : 05-05-06 09:43

Carsten Pedersen wrote:
> Det er fordi NOW() returnerer ikke blot en dato, men også et klokkeslet.
> Brug CURDATE(), CURRENT_DATE eller CURRENT_DATE() i stedet. Det er lige
> meget hvilken, da de returnerer det samme.

Det virker jo meget bedre nu. Tak for det, den er også skrevet i
baghovedet :)

Martin (05-05-2006)
Kommentar
Fra : Martin


Dato : 05-05-06 09:48

Martin wrote:
> Jeg har et lille problem med at finde en løsning på mit statement.
>
> Beskrivelse af mine 3 tabeller.
>
> tbl_item = varer produkter
> ID
> navn
> normal_pris
>
> tbl_campaign = kampagner
> ID
> navn
> from_date (datetime)
> to_date (datetime)
>
> tbl_campaignitems = varer til kampagne
> ID
> item_ID
> campaign_ID
> kampagne_pris
>
> Mit ønske er:
> at få varens navn og ID
> at få de x antal varer ud med størst forskel mellem normal_pris og
> kampagne_pris (denne er ikke et krav, da jeg kan lave det med PHP, hvis
> det skulle være)
> og til sidst, at kun få varer ud der ER en kampagne på :)
>
> Det hele kører på MySQL 4.0.24, sammen med PHP 5 :)

Jeg er stødt ind i et problem.

Problemet er nu, at jeg har fundet ud af at priserne ligger i en 4. tabel.

Altså:
tbl_prices = priser på varerne
ID
item_ID
date_add (datetime)
price

Mit ønske er stadig det samme som før.
Men nu ligger priserne jo i en 4. tabel.



Jeg har selvfølgelig prøvet at skrive:

SELECT it.ID, it.Navn, (price.normal_pris - ci.kampagne_pris) AS Forskel
FROM tbl_item it, tbl_campaignitems ci, tbl_campaign tc, tbl_prices price
WHERE
price.item_ID = (1)
it.ID = ci.item_ID AND
(CURDATE() BETWEEN tc.from_date AND tc.to_date)
ORDER BY Forskel DESC
LIMIT 0,10

(1) = Her er prøvet en MASSE, men intet har virket endnu.
Ligefra it.ID og til en inner select(?) altså (SELECT price FROM...)

Martin (05-05-2006)
Kommentar
Fra : Martin


Dato : 05-05-06 09:50

Martin wrote:
> WHERE
> price.item_ID = (1)
> it.ID = ci.item_ID AND
> (CURDATE() BETWEEN tc.from_date AND tc.to_date)

og der har selvfølgelig været en AND i første linje :)

Carsten Pedersen (06-05-2006)
Kommentar
Fra : Carsten Pedersen


Dato : 06-05-06 02:17

Hej, Martin!

"Martin" <maa@scandesigns.dk> skrev i en meddelelse
news:445b1148$0$15793$14726298@news.sunsite.dk...
> Martin wrote:
>> Jeg har et lille problem med at finde en løsning på mit statement.
>>
>> Beskrivelse af mine 3 tabeller.
>>
>> tbl_item = varer produkter
>> ID
>> navn
>> normal_pris
>>
>> tbl_campaign = kampagner
>> ID
>> navn
>> from_date (datetime)
>> to_date (datetime)
>>
>> tbl_campaignitems = varer til kampagne
>> ID
>> item_ID
>> campaign_ID
>> kampagne_pris
>>
>> Mit ønske er:
>> at få varens navn og ID
>> at få de x antal varer ud med størst forskel mellem normal_pris og
>> kampagne_pris (denne er ikke et krav, da jeg kan lave det med PHP, hvis
>> det skulle være)
>> og til sidst, at kun få varer ud der ER en kampagne på :)
>>
>> Det hele kører på MySQL 4.0.24, sammen med PHP 5 :)
>
> Jeg er stødt ind i et problem.
>
> Problemet er nu, at jeg har fundet ud af at priserne ligger i en 4. tabel.
>
> Altså:
> tbl_prices = priser på varerne
> ID
> item_ID
> date_add (datetime)
> price
>
> Mit ønske er stadig det samme som før.
> Men nu ligger priserne jo i en 4. tabel.
>
>
>
> Jeg har selvfølgelig prøvet at skrive:
>
> SELECT it.ID, it.Navn, (price.normal_pris - ci.kampagne_pris) AS Forskel
> FROM tbl_item it, tbl_campaignitems ci, tbl_campaign tc, tbl_prices price
> WHERE
> price.item_ID = (1)
> it.ID = ci.item_ID AND
> (CURDATE() BETWEEN tc.from_date AND tc.to_date)
> ORDER BY Forskel DESC
> LIMIT 0,10
>
> (1) = Her er prøvet en MASSE, men intet har virket endnu.
> Ligefra it.ID og til en inner select(?) altså (SELECT price FROM...)

Mon ikke

SELECT it.ID, it.Navn, (price.normal_pris - ci.kampagne_pris) AS Forskel,
tp.price
FROM tbl_item it, tbl_campaignitems ci, tbl_campaign tc, tbl_prices price,
tbl_prices
WHERE
it.ID = ci.item_ID AND
(CURDATE() BETWEEN tc.from_date AND tc.to_date) AND
tp.item_ID = it.ID
ORDER BY Forskel DESC
LIMIT 0,10

virker.

Mvh


C@rsten



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste