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