/ 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
SELECT * og count()
Fra : Stig Sørensen


Dato : 20-03-08 07:38

Hej gruppe.

Er kørt helt fast og har brug for hjælp.
mySQL.


SELECT * from phpbb_garage, phpbb_garage_makes,
phpbb_garage_guestbooks, punbb_users WHERE phpbb_garage.make_id =
phpbb_garage_makes.id_makes AND phpbb_garage_guestbooks.author_id =
punbb_users.id AND phpbb_garage_guestbooks.garage_id = phpbb_garage.id
LIMIT 10;


Ovenstående virker.

Hvad jeg gerne vil have talt er, hvor mange rækker
phpbb_garage_guestbooks.garage_id består af, HVOR
phpbb_garage_guestbooks.garage_id = phpbb_garage_guestbooks.garage_id
(altså samme værdi).

Men hvordan slår jeg count sammen med ovenstående SELECT?
Jeg har prøvet at tilføje "COUNT(*) from
phpbb_garage_guestbooks.garage_id WHERE
phpbb_garage_guestbooks.garage_id = phpbb_garage_guestbooks.garage_id
GROUP BY phpbb_garage_guestbooks.garage_id ORDER BY
phpbb_garage_guestbooks.garage_id DESC"
- både bagerst, først i SELECTEN osv. Intet virker.

Nogen der kan hjælpe mig? Hvis jeg ikke har forklaret mig godt nok, så
skriv endelig, så vil jeg forsøge påny.


På forhånd mange gange tak og god Påske.

Mvh
Stig Sørensen

 
 
Martin (20-03-2008)
Kommentar
Fra : Martin


Dato : 20-03-08 15:11

Stig Sørensen wrote:
> Hej gruppe.
>
> Er kørt helt fast og har brug for hjælp.
> mySQL.
>
>
> SELECT * from phpbb_garage, phpbb_garage_makes,
> phpbb_garage_guestbooks, punbb_users WHERE phpbb_garage.make_id =
> phpbb_garage_makes.id_makes AND phpbb_garage_guestbooks.author_id =
> punbb_users.id AND phpbb_garage_guestbooks.garage_id = phpbb_garage.id
> LIMIT 10;
>
>
> Ovenstående virker.
>
> Hvad jeg gerne vil have talt er, hvor mange rækker
> phpbb_garage_guestbooks.garage_id består af, HVOR
> phpbb_garage_guestbooks.garage_id = phpbb_garage_guestbooks.garage_id
> (altså samme værdi).
>
> Men hvordan slår jeg count sammen med ovenstående SELECT?
> Jeg har prøvet at tilføje "COUNT(*) from

COUNT(phpbb_garage_guestbooks.*)

> phpbb_garage_guestbooks.garage_id WHERE
> phpbb_garage_guestbooks.garage_id = phpbb_garage_guestbooks.garage_id
> GROUP BY phpbb_garage_guestbooks.garage_id ORDER BY
> phpbb_garage_guestbooks.garage_id DESC"
> - både bagerst, først i SELECTEN osv. Intet virker.
>
> Nogen der kan hjælpe mig? Hvis jeg ikke har forklaret mig godt nok, så
> skriv endelig, så vil jeg forsøge påny.
>
>
> På forhånd mange gange tak og god Påske.
>
> Mvh
> Stig Sørensen

Stig Sørensen (20-03-2008)
Kommentar
Fra : Stig Sørensen


Dato : 20-03-08 10:45

On 20 Mar., 15:11, Martin <mar...@aarhof.invalid> wrote:
> COUNT(phpbb_garage_guestbooks.*)

Du kunne ikke have brugt 10 sekunder mere og fortalt hvordan
ovenstående skal sættes sammen med SELECT sætningen?
Uanset hvordan jeg prøver at sætte COUNT ind giver det fejl.

"SELECT * from phpbb_garage, phpbb_garage_makes,
phpbb_garage_guestbooks, punbb_users WHERE phpbb_garage.make_id =
phpbb_garage_makes.id_makes AND phpbb_garage_guestbooks.author_id =
punbb_users.id AND phpbb_garage_guestbooks.garage_id =
phpbb_garage.id, COUNT(phpbb_garage_guestbooks.*) GROUP BY COUNT LIMIT
10"

?

Stig Sørensen (20-03-2008)
Kommentar
Fra : Stig Sørensen


Dato : 20-03-08 11:45

Ved rent gætteri ramte jeg rigtigt:


SELECT *, COUNT(phpbb_garage_guestbooks.garage_id) as tal from
phpbb_garage, phpbb_garage_makes, phpbb_garage_guestbooks, punbb_users
WHERE phpbb_garage.make_id = phpbb_garage_makes.id_makes AND
phpbb_garage_guestbooks.author_id = punbb_users.id AND
phpbb_garage_guestbooks.garage_id = phpbb_garage.id GROUP BY
phpbb_garage_guestbooks.garage_id ORDER BY tal DESC LIMIT 10

Jens Gyldenkærne Cla~ (21-03-2008)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 21-03-08 12:34

Stig Sørensen skrev:

> Er kørt helt fast og har brug for hjælp.
> mySQL.

Jeg har opdaget at du fik løst problemet - men du får lige et par
generelle indspark alligevel.

> SELECT * from phpbb_garage, phpbb_garage_makes,
> phpbb_garage_guestbooks, punbb_users WHERE
> phpbb_garage.make_id phpbb_garage_makes.id_makes AND
> phpbb_garage_guestbooks.author_id punbb_users.id AND
> phpbb_garage_guestbooks.garage_id = phpbb_garage.id LIMIT 10;

Det er svært at læse en så lang sql-kode uden formatering. Et par
aliasser og evt. eksplicit joinangivelse kan gøre underværker:

SELECT *
FROM phpbb_garage g
INNER JOIN phpbb_garage_makes gm
ON g.make_id = gm.id_makes
INNER JOIN phpbb_garage_guestbooks gb
   ON g.id = gb.garage_id
INNER JOIN punbb_users
   ON gm.author_id = u.id AND    


> Hvad jeg gerne vil have talt er, hvor mange rækker
> phpbb_garage_guestbooks.garage_id består af, HVOR
> phpbb_garage_guestbooks.garage_id =
> phpbb_garage_guestbooks.garage_id (altså samme værdi).

Ovenstående giver ikke mening. Jeg gætter på at du gerne vil lave
en gruppering der for hver garage (garage_id) viser hvor mange
poster der er tilknyttet i garage_guestbooks.

Den grundlæggende syntaks er her:

SELECT garage_id, COUNT(*)
FROM phpbb_garage_guestbooks
GROUP BY garage_id


> Men hvordan slår jeg count sammen med ovenstående SELECT?
> Jeg har prøvet at tilføje "COUNT(*) from

I grupperede forespørgsler skal alle felter i select-listen enten
være grupperet (medtaget i GROUP BY-linjen) eller aggregeret
(pakket ind i en aggregatfunktion som SUM, COUNT, AVG,...).

Derfor er SELECT *, COUNT(...) som udgangspunkt en dårlig ide. Hvis
man fx skrev grupperingsforespørgslen ovenfor med en * - som
følger:

SELECT *, COUNT(*)
FROM phpbb_garage_guestbooks
GROUP BY garage_id

- vil forespørgslen skulle levere data fra alle felter i tabellen.
Garage_id'et er nemt nok - da det er omfattet af grupperingen. Men
hvis der nu fx er et guestbook_id - der i sagens natur er unikt for
hver post, vil databasen ikke kunne vælge én værdi til postsættet,
og derfor er forespørgslen ikke veldefineret.

Nogle databasesystemer - bl.a. MySQL - vælger så at "hjælpe"
brugeren ved at gætte sig til hvad brugeren har ment - så vidt jeg
husker ved i praksis at tilføje de problematiske felter til GROUP
BY-udtrykket. Andre vil bare stoppe udførelsen og komme med en
fejl.

Hvis man skal bruge aggregerede og ikke-aggregerede oplysninger
sammen - og ikke bare vil lave et monsterstort grupperingsudtryk,
kan man fx bruge et join til en grupperet forespørgsel:

SELECT *
FROM phpbb_garage g
INNER JOIN
   (SELECT garage_id, COUNT(*)
   FROM phpbb_garage_guestbooks
   GROUP BY garage_id) As gruppe
ON g.garage_id = gruppe.garage_id


--
Jens Gyldenkærne Clausen
»Diplomatiet består netop i, at de gamle kommatister kan få lov til
at tro, at de har vundet. Men i virkeligheden har de tabt.«
Ole Togeby i Information

Leif Neland (29-04-2008)
Kommentar
Fra : Leif Neland


Dato : 29-04-08 11:20


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns9A687FEB3C22Djcdmfdk@gyrosmod.dtext.news.tele.dk...
>
> I grupperede forespørgsler skal alle felter i select-listen enten
> være grupperet (medtaget i GROUP BY-linjen) eller aggregeret
> (pakket ind i en aggregatfunktion som SUM, COUNT, AVG,...).
>
> Derfor er SELECT *, COUNT(...) som udgangspunkt en dårlig ide. Hvis
> man fx skrev grupperingsforespørgslen ovenfor med en * - som
> følger:
>
> SELECT *, COUNT(*)
> FROM phpbb_garage_guestbooks
> GROUP BY garage_id
>
> - vil forespørgslen skulle levere data fra alle felter i tabellen.
> Garage_id'et er nemt nok - da det er omfattet af grupperingen. Men
> hvis der nu fx er et guestbook_id - der i sagens natur er unikt for
> hver post, vil databasen ikke kunne vælge én værdi til postsættet,
> og derfor er forespørgslen ikke veldefineret.
>
> Nogle databasesystemer - bl.a. MySQL - vælger så at "hjælpe"
> brugeren ved at gætte sig til hvad brugeren har ment - så vidt jeg
> husker ved i praksis at tilføje de problematiske felter til GROUP
> BY-udtrykket. Andre vil bare stoppe udførelsen og komme med en
> fejl.

Mysql tager blot værduerne fra en tilfældig række ud af de, der har den
samme group-by værdi.

Leif



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

Månedens bedste
Årets bedste
Sidste års bedste