/ 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
Create View
Fra : EnjoyNews


Dato : 03-07-07 12:44

Hej

Jeg har et spørgsmål til create view..

Jeg har en counter som henter data fra en table som indeholde dato og antal.
Det er et specifikt antal på denne dato.
2007-07-01 24
2007-07-02 18
2007-07-03 28
osv.

Jeg har så en table som ikke indeholder dato og antal men en opretdato på
alle mine kunder.
kundeid7 2007-07-01
kundeid8 2007-07-01
kundeid9 2007-07-01
kundeid10 2007-07-02
kundeid11 2007-07-02
kundeid12 2007-07-02
kundeid13 2007-07-02
kundeid14 2007-07-03

Hvis jeg skal bruge den samme counter skal jeg jo lave min kunde table om
til
2007-07-01 3
2007-07-02 4
2007-07-03 1

Men kan dette ikke laves med create view.
Jeg har fået forståelsen af at man med create view kan lave en "ny table"
som hedder ex. Counter og så i en anden query skrive Select * From Counter.
Altså at den så henter data fra det view den har lavet.
Men jeg er måske helt galt på den ?

Jeg vil helst undgå at lave det med JOIN da jeg har en hel del query's i
denne fil der henter counter data, så det ville være lettere bare at bevare
alle disse query's som de er, og så bare lave min kundetableom.


Håber mit spørgsmål var til at forstå

Michael



 
 
Henrik Davidsen (03-07-2007)
Kommentar
Fra : Henrik Davidsen


Dato : 03-07-07 18:15

> Men kan dette ikke laves med create view.

Jo det må det kunne. Du må kunne lave et view i sitl med dette:

create view my_view
as
select opretdato, count(*) as antal
from din_tabel
group by opretdato


Så vil
select * from my_view

give
2007-07-01 3
2007-07-02 4
2007-07-03 1

Hvis jeg har forstået dit spørgsmål korrekt, så burde ovenstående kunne
bruges.
/Sjang



EnjoyNews (03-07-2007)
Kommentar
Fra : EnjoyNews


Dato : 03-07-07 22:46


"Henrik Davidsen" <none@none.dk> skrev i en meddelelse
news:468a83bd$0$90276$14726298@news.sunsite.dk...
>> Men kan dette ikke laves med create view.
>
> Jo det må det kunne. Du må kunne lave et view i sitl med dette:
>
> create view my_view
> as
> select opretdato, count(*) as antal
> from din_tabel
> group by opretdato
>
>
> Så vil
> select * from my_view
>
> give
> 2007-07-01 3
> 2007-07-02 4
> 2007-07-03 1
>
> Hvis jeg har forstået dit spørgsmål korrekt, så burde ovenstående kunne
> bruges.
> /Sjang
>

Mange tak
Jeg har selv været inde på næsten det samme..
Men hvis jeg skrive

mysql_query ("CREATE VIEW Count AS SELECT OpretData AS Dato, COUNT(*) AS
Antal FROM Kunder GROUP BY OpretDato");
$getlist = mysql_query("SELECT * FROM Count ORDER BY Antal DESC");
while ($row = mysql_fetch_array($getlist)){$antal=$row['Antal'];}

så skriver den:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
resource in /var/www/www.festfagbogen.dk/www/Admin/Count/Counter.php on line
21

og line 21 er WHILE linien
Hvad er der galt ?
Det er som om den godt kan finde ud af Create View linien, men den kan ikke
finde ud af at bruge dette view efterfølgende ?





EnjoyNews (03-07-2007)
Kommentar
Fra : EnjoyNews


Dato : 03-07-07 22:52


"EnjoyNews" <mh-nyheder@mail.dk> skrev i en meddelelse
news:468ac3b6$0$2658$edfadb0f@dread15.news.tele.dk...
>
> "Henrik Davidsen" <none@none.dk> skrev i en meddelelse
> news:468a83bd$0$90276$14726298@news.sunsite.dk...
>>> Men kan dette ikke laves med create view.
>>
>> Jo det må det kunne. Du må kunne lave et view i sitl med dette:
>>
>> create view my_view
>> as
>> select opretdato, count(*) as antal
>> from din_tabel
>> group by opretdato
>>
>>
>> Så vil
>> select * from my_view
>>
>> give
>> 2007-07-01 3
>> 2007-07-02 4
>> 2007-07-03 1
>>
>> Hvis jeg har forstået dit spørgsmål korrekt, så burde ovenstående kunne
>> bruges.
>> /Sjang
>>
>
> Mange tak
> Jeg har selv været inde på næsten det samme..
> Men hvis jeg skrive
>
> mysql_query ("CREATE VIEW Count AS SELECT OpretData AS Dato, COUNT(*) AS
> Antal FROM Kunder GROUP BY OpretDato");
> $getlist = mysql_query("SELECT * FROM Count ORDER BY Antal DESC");
> while ($row = mysql_fetch_array($getlist)){$antal=$row['Antal'];}
>
> så skriver den:
> Warning: mysql_fetch_array(): supplied argument is not a valid MySQL
> result resource in
> /var/www/www.festfagbogen.dk/www/Admin/Count/Counter.php on line 21
>
> og line 21 er WHILE linien
> Hvad er der galt ?
> Det er som om den godt kan finde ud af Create View linien, men den kan
> ikke finde ud af at bruge dette view efterfølgende ?


Glemte lige at skrive at det er en MySQL database, hvis det gør nogen
forskel.



Michael Zedeler (04-07-2007)
Kommentar
Fra : Michael Zedeler


Dato : 04-07-07 09:26

EnjoyNews wrote:
> "Henrik Davidsen" <none@none.dk> skrev i en meddelelse
> news:468a83bd$0$90276$14726298@news.sunsite.dk...
>>> Men kan dette ikke laves med create view.
>> Jo det må det kunne. Du må kunne lave et view i sitl med dette:
>>
>> create view my_view
>> as
>> select opretdato, count(*) as antal
>> from din_tabel
>> group by opretdato
>>
>>
>> Så vil
>> select * from my_view
>>
>> give
>> 2007-07-01 3
>> 2007-07-02 4
>> 2007-07-03 1
>>
>> Hvis jeg har forstået dit spørgsmål korrekt, så burde ovenstående kunne
>> bruges.
>> /Sjang
>>
>
> Mange tak
> Jeg har selv været inde på næsten det samme..
> Men hvis jeg skrive
>
> mysql_query ("CREATE VIEW Count AS SELECT OpretData AS Dato, COUNT(*) AS
> Antal FROM Kunder GROUP BY OpretDato");
> $getlist = mysql_query("SELECT * FROM Count ORDER BY Antal DESC");
> while ($row = mysql_fetch_array($getlist)){$antal=$row['Antal'];}

Tre kommentarer:

- Du behøver kun at oprette dit view en gang (du opretter jo heller
ikke tabeller hver gang, du skal bruge dem).
- Ordet "count" er reserveret til aggregat-funktionen med samme navn i
mysql. Brug et andet navn.
- Du har glemt at indentere din kode.

Mvh. Michael.

Thorbjørn Ravn Ander~ (04-07-2007)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 04-07-07 12:05

Michael Zedeler <michael@zedeler.dk> writes:

> - Ordet "count" er reserveret til aggregat-funktionen med samme navn
> i mysql. Brug et andet navn.

Er der noget med man normalt kan omgå den slags ting med apostroffer
om, eller er det kun noget jeg har set i Oracle (var det vist?)
--
Thorbjørn Ravn Andersen

Michael Zedeler (04-07-2007)
Kommentar
Fra : Michael Zedeler


Dato : 04-07-07 13:22

Thorbjørn Ravn Andersen wrote:
> Michael Zedeler <michael@zedeler.dk> writes:
>
>> - Ordet "count" er reserveret til aggregat-funktionen med samme navn
>> i mysql. Brug et andet navn.
>
> Er der noget med man normalt kan omgå den slags ting med apostroffer
> om, eller er det kun noget jeg har set i Oracle (var det vist?)

Ja - med dobbelte anførselstegn kan man så få lov alligevel, men det er
jo ikke nødvendigvis noget alle værktøjer kan finde ud af, så hvis man
vil slippe for hovedpinen, er det bedst blot helt at undgå reserverede ord.

Mvh. Michael.

Martin M. Pedersen (04-07-2007)
Kommentar
Fra : Martin M. Pedersen


Dato : 04-07-07 20:39

Thorbjørn Ravn Andersen wrote:
> Michael Zedeler <michael@zedeler.dk> writes:
>
>> - Ordet "count" er reserveret til aggregat-funktionen med samme navn
>> i mysql. Brug et andet navn.
>
> Er der noget med man normalt kan omgå den slags ting med apostroffer
> om, eller er det kun noget jeg har set i Oracle (var det vist?)

Det kan man (desværre) også i MySQL.

/Martin

EnjoyNews (04-07-2007)
Kommentar
Fra : EnjoyNews


Dato : 04-07-07 13:53


"Michael Zedeler" <michael@zedeler.dk> skrev i en meddelelse
news:_QIii.10$Wd2.9@news.get2net.dk...
> EnjoyNews wrote:
>> "Henrik Davidsen" <none@none.dk> skrev i en meddelelse
>> news:468a83bd$0$90276$14726298@news.sunsite.dk...
>>>> Men kan dette ikke laves med create view.
>>> Jo det må det kunne. Du må kunne lave et view i sitl med dette:
>>>
>>> create view my_view
>>> as
>>> select opretdato, count(*) as antal
>>> from din_tabel
>>> group by opretdato
>>>
>>>
>>> Så vil
>>> select * from my_view
>>>
>>> give
>>> 2007-07-01 3
>>> 2007-07-02 4
>>> 2007-07-03 1
>>>
>>> Hvis jeg har forstået dit spørgsmål korrekt, så burde ovenstående kunne
>>> bruges.
>>> /Sjang
>>>
>>
>> Mange tak
>> Jeg har selv været inde på næsten det samme..
>> Men hvis jeg skrive
>>
>> mysql_query ("CREATE VIEW Count AS SELECT OpretData AS Dato, COUNT(*) AS
>> Antal FROM Kunder GROUP BY OpretDato");
>> $getlist = mysql_query("SELECT * FROM Count ORDER BY Antal DESC");
>> while ($row = mysql_fetch_array($getlist)){$antal=$row['Antal'];}
>
> Tre kommentarer:
>
> - Du behøver kun at oprette dit view en gang (du opretter jo heller ikke
> tabeller hver gang, du skal bruge dem).

Nej, det view i den første linie står kun én gang.
Linie 2 i mit eksempel er så kun 1 af flere query's der skal bruge dette
view, men den laver fejl på alle sammen.

> - Ordet "count" er reserveret til aggregat-funktionen med samme navn i
> mysql. Brug et andet navn.

Ja, det kom jeg også lige i tanke om... Jeg har omdøbt den, og det er stadig
samme fejl..
Men som svar på et andet indlæg, så kan man bruge ´Count´ det har jeg aldrig
haft problemer med.

> - Du har glemt at indentere din kode.

indentere ? dan skal jeg lige have forklaget tror jeg ?



Michael Zedeler (04-07-2007)
Kommentar
Fra : Michael Zedeler


Dato : 04-07-07 15:22

EnjoyNews wrote:
> "Michael Zedeler" <michael@zedeler.dk> skrev i en meddelelse
> news:_QIii.10$Wd2.9@news.get2net.dk...
>
>> Tre kommentarer:
>>
>> - Du behøver kun at oprette dit view en gang (du opretter jo heller ikke
>> tabeller hver gang, du skal bruge dem).
>
> Nej, det view i den første linie står kun én gang.
> Linie 2 i mit eksempel er så kun 1 af flere query's der skal bruge dette
> view, men den laver fejl på alle sammen.

Spørg mysql om hvad problemet er - der er en funktion til det. Læs
manualen, hvis du ikke kan huske hvad den hedder.

>> - Ordet "count" er reserveret til aggregat-funktionen med samme navn i
>> mysql. Brug et andet navn.
>
> Ja, det kom jeg også lige i tanke om... Jeg har omdøbt den, og det er stadig
> samme fejl..
> Men som svar på et andet indlæg, så kan man bruge ´Count´ det har jeg aldrig
> haft problemer med.

Ja. Se også min kommentar til den praksis i mit svar til Thorbjørn i
denne tråd.

>> - Du har glemt at indentere din kode.
>
> indentere ? dan skal jeg lige have forklaget tror jeg ?

http://en.wikipedia.org/wiki/Indent_style

Det er ikke kun for at få pæn kode - det hjælper dig også til at få
færre fejl.

Mvh. Michael.

EnjoyNews (04-07-2007)
Kommentar
Fra : EnjoyNews


Dato : 04-07-07 14:13


"Michael Zedeler" <michael@zedeler.dk> skrev i en meddelelse
news:_QIii.10$Wd2.9@news.get2net.dk...
> EnjoyNews wrote:
>> "Henrik Davidsen" <none@none.dk> skrev i en meddelelse
>> news:468a83bd$0$90276$14726298@news.sunsite.dk...
>>>> Men kan dette ikke laves med create view.
>>> Jo det må det kunne. Du må kunne lave et view i sitl med dette:
>>>
>>> create view my_view
>>> as
>>> select opretdato, count(*) as antal
>>> from din_tabel
>>> group by opretdato
>>>
>>>
>>> Så vil
>>> select * from my_view
>>>
>>> give
>>> 2007-07-01 3
>>> 2007-07-02 4
>>> 2007-07-03 1
>>>
>>> Hvis jeg har forstået dit spørgsmål korrekt, så burde ovenstående kunne
>>> bruges.
>>> /Sjang
>>>
>>
>> Mange tak
>> Jeg har selv været inde på næsten det samme..
>> Men hvis jeg skrive
>>
>> mysql_query ("CREATE VIEW Count AS SELECT OpretData AS Dato, COUNT(*) AS
>> Antal FROM Kunder GROUP BY OpretDato");
>> $getlist = mysql_query("SELECT * FROM Count ORDER BY Antal DESC");
>> while ($row = mysql_fetch_array($getlist)){$antal=$row['Antal'];}
>
> Tre kommentarer:
>
> - Du behøver kun at oprette dit view en gang (du opretter jo heller ikke
> tabeller hver gang, du skal bruge dem).
> - Ordet "count" er reserveret til aggregat-funktionen med samme navn i
> mysql. Brug et andet navn.
> - Du har glemt at indentere din kode.
>
> Mvh. Michael.

Har lige prøve at få den til at skrive mysql:error ud, og den skrive
Create failed: CREATE VIEW command denied to user 'mit db
brugernavn'@'80.196.101.254' for table 'CRCount'

hvad betyder det ?



Michael Zedeler (04-07-2007)
Kommentar
Fra : Michael Zedeler


Dato : 04-07-07 15:23

EnjoyNews wrote:
> Har lige prøve at få den til at skrive mysql:error ud, og den skrive
> Create failed: CREATE VIEW command denied to user 'mit db
> brugernavn'@'80.196.101.254' for table 'CRCount'
>
> hvad betyder det ?

Det betyder at du ikke har rettigheder til at lave views. Jeg kender
ikke mysqls rettighedssystem godt nok til at vide om det er noget man
kan tildele særskilt fra at oprette tabeller.

Mvh. Michael.

Martin (04-07-2007)
Kommentar
Fra : Martin


Dato : 04-07-07 18:02

Michael Zedeler wrote:
> EnjoyNews wrote:
>> Har lige prøve at få den til at skrive mysql:error ud, og den skrive
>> Create failed: CREATE VIEW command denied to user 'mit db
>> brugernavn'@'80.196.101.254' for table 'CRCount'
>>
>> hvad betyder det ?
>
> Det betyder at du ikke har rettigheder til at lave views. Jeg kender
> ikke mysqls rettighedssystem godt nok til at vide om det er noget man
> kan tildele særskilt fra at oprette tabeller.

der er en særskilt rettighed til at create views - spørg din udbyder om
han vil give dig adgang til dette. Jeg har hos de fleste (lidt dyrere)
hosts fået tildelt rettigheden uden nogle spørgsmål - men har endnu
aldrig fået det hos en enkelt (billigt) host

Ingen hosts nævnes, for ikke at træde på nogle!

EnjoyNews (04-07-2007)
Kommentar
Fra : EnjoyNews


Dato : 04-07-07 19:56


"Martin" <maaNO@SPAMscandesigns.dk> skrev i en meddelelse
news:468bd2a1$0$90267$14726298@news.sunsite.dk...
> Michael Zedeler wrote:
>> EnjoyNews wrote:
>>> Har lige prøve at få den til at skrive mysql:error ud, og den skrive
>>> Create failed: CREATE VIEW command denied to user 'mit db
>>> brugernavn'@'80.196.101.254' for table 'CRCount'
>>>
>>> hvad betyder det ?
>>
>> Det betyder at du ikke har rettigheder til at lave views. Jeg kender ikke
>> mysqls rettighedssystem godt nok til at vide om det er noget man kan
>> tildele særskilt fra at oprette tabeller.
>
> der er en særskilt rettighed til at create views - spørg din udbyder om
> han vil give dig adgang til dette. Jeg har hos de fleste (lidt dyrere)
> hosts fået tildelt rettigheden uden nogle spørgsmål - men har endnu aldrig
> fået det hos en enkelt (billigt) host
>
> Ingen hosts nævnes, for ikke at træde på nogle!

Den ligger på Wannafind, så jeg har skrevet og spurgt dem..
Mange tak.



EnjoyNews (05-07-2007)
Kommentar
Fra : EnjoyNews


Dato : 05-07-07 14:06


"EnjoyNews" <mh-nyheder@mail.dk> skrev i en meddelelse
news:468bed76$0$2105$edfadb0f@dread15.news.tele.dk...
>
> "Martin" <maaNO@SPAMscandesigns.dk> skrev i en meddelelse
> news:468bd2a1$0$90267$14726298@news.sunsite.dk...
>> Michael Zedeler wrote:
>>> EnjoyNews wrote:
>>>> Har lige prøve at få den til at skrive mysql:error ud, og den skrive
>>>> Create failed: CREATE VIEW command denied to user 'mit db
>>>> brugernavn'@'80.196.101.254' for table 'CRCount'
>>>>
>>>> hvad betyder det ?
>>>
>>> Det betyder at du ikke har rettigheder til at lave views. Jeg kender
>>> ikke mysqls rettighedssystem godt nok til at vide om det er noget man
>>> kan tildele særskilt fra at oprette tabeller.
>>
>> der er en særskilt rettighed til at create views - spørg din udbyder om
>> han vil give dig adgang til dette. Jeg har hos de fleste (lidt dyrere)
>> hosts fået tildelt rettigheden uden nogle spørgsmål - men har endnu
>> aldrig fået det hos en enkelt (billigt) host
>>
>> Ingen hosts nævnes, for ikke at træde på nogle!
>
> Den ligger på Wannafind, så jeg har skrevet og spurgt dem..
> Mange tak.

Så har wannafind åbnet, og det virker.
Mange tak for jeres hjælp.



Kristian Damm Jensen (03-07-2007)
Kommentar
Fra : Kristian Damm Jensen


Dato : 03-07-07 20:21

EnjoyNews wrote:
<snip>
> Håber mit spørgsmål var til at forstå

Lidt kringlet, primært fordi du roder begreberne sammen.

Henrik Davidsen har allerede korrekt angivet, hvordan du opretter et view,
der -så vidt jeg kan se - gør det du vil.

Men et view er ikke en tabel! Et view er en specifik synsvinkel på en eller
flere tabeller udtrykt gennem en select. Men man kan fx ikke - i al fald
ikke altid - lave update eller delete på et view.

Der er forskellige fordele ved views, og de peger i mange forskellige
retninger [1]. Det er derfor ikke til at sige, om du reelt har brug for et
view, eller lige så godt kunne skrive den fulde select hver gang du har brug
for de pågældende data.

[1] Jeg har fx ved én lejlighed brugt et view til at camouflere for gamle
programmer at der var lavet en ny tabel. Således
Før:
Gammel_tabel er en tabel
Efter
Ny_tabel er en tabel, der udvider gammel_tabel og ændrer den måde data
lagres.
Gammel_tabel er et view, der får det til at se ud som om gammel_tabel stadig
findes.
--
Venlig hilsen /Best regards
Kristian Damm Jensen



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408182
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste