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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
MySQL: Nestede select's
Fra : Nikolaj Rasmussen


Dato : 14-06-03 14:23

Hej,

Jeg prøver at få følgende nested select-statement til at se hvor mange
brugere der har skrevet sig på en pcw
for en given pcw....

select id, (select count(*) from user_pcw_relations where pcw_id=pcw.id and
signed_up=1) as hmsu from pcw

.... virker perfekt med mssql/access/interbase etc etc, men fejler med mysql.
Kan det virkelig passe?? :(



Kan virkelig ikke komme i tanke om en bedre ide... for den følgende kode er
så lam, at det er alt for dumt til
jeg vil lave det på den måde :/

$qry=mysql_query("select * from pcw")
while ($row=mysql_fetch_array($qry))
{
$qryUser="select count(*) from user_pcw_relations where
pcw_id".$row["id"]." and signed_up=1";
etc etc....
}


mvh
Nikolaj Rasmussen



 
 
Søren Reinke (14-06-2003)
Kommentar
Fra : Søren Reinke


Dato : 14-06-03 15:20

Nikolaj Rasmussen wrote:
> Hej,
>
> Jeg prøver at få følgende nested select-statement til at se hvor mange
> brugere der har skrevet sig på en pcw
> for en given pcw....
>
> select id, (select count(*) from user_pcw_relations where
> pcw_id=pcw.id and signed_up=1) as hmsu from pcw
>
> ... virker perfekt med mssql/access/interbase etc etc, men fejler med
> mysql. Kan det virkelig passe?? :(

Ja, hvis du bruge MySQL V3.x, men prøv at hent den aller nyeste MySQL jeg
mener V4.x understøtter subselects.

--
Med venlig hilsen
Søren Reinke Rescue Diver Fjern ihsyd fra email
http://www.dykkercenterlangeland.dk
Danmarks hyggeligste Pinse Træf 6-9 Juni


Jacob Atzen (14-06-2003)
Kommentar
Fra : Jacob Atzen


Dato : 14-06-03 15:31

"Søren Reinke" <disky@disky.ihsyd.dk> writes:

> Nikolaj Rasmussen wrote:
> > Hej,
> >
> > Jeg prøver at få følgende nested select-statement til at se hvor mange
> > brugere der har skrevet sig på en pcw
> > for en given pcw....
> >
> > select id, (select count(*) from user_pcw_relations where
> > pcw_id=pcw.id and signed_up=1) as hmsu from pcw
> >
> > ... virker perfekt med mssql/access/interbase etc etc, men fejler med
> > mysql. Kan det virkelig passe?? :(
>
> Ja, hvis du bruge MySQL V3.x, men prøv at hent den aller nyeste MySQL jeg
> mener V4.x understøtter subselects.

Du skal vist op i 4.1 for at få rigtige subselects:
<http://www.mysql.com/documentation/mysql/bychapter/manual_Introduction.html#Nutshell_4.1_features>

Til OP: Prøv at spørge i en database gruppe, der får du sikkert et
bedre svar.

--
Med venlig hilsen
- Jacob Atzen

Peter Brodersen (14-06-2003)
Kommentar
Fra : Peter Brodersen


Dato : 14-06-03 15:32

On Sat, 14 Jun 2003 16:20:29 +0200, "Søren Reinke"
<disky@disky.ihsyd.dk> wrote:

>Ja, hvis du bruge MySQL V3.x, men prøv at hent den aller nyeste MySQL jeg
>mener V4.x understøtter subselects.

Nyeste stable (4.0.13) gør ikke; nyeste alpha (4.1.0) gør.

Selvom MySQL 4.0.x ikke lader til at byde på meget nyt (.. og så ofte
bruger jeg heller ikke UNION), så lad mig dog igen slå et slag for
dens querycache. For websites, der præsenterer meget af det samme
indhold, kan den virkelig give et performance-boost, selv ved bare at
ofre få MB RAM til dens cache.

--
- Peter Brodersen

Søren Reinke (14-06-2003)
Kommentar
Fra : Søren Reinke


Dato : 14-06-03 16:32

Peter Brodersen wrote:
> On Sat, 14 Jun 2003 16:20:29 +0200, "Søren Reinke"
> <disky@disky.ihsyd.dk> wrote:
>
>> Ja, hvis du bruge MySQL V3.x, men prøv at hent den aller nyeste
>> MySQL jeg mener V4.x understøtter subselects.
>
> Nyeste stable (4.0.13) gør ikke; nyeste alpha (4.1.0) gør.
>
> Selvom MySQL 4.0.x ikke lader til at byde på meget nyt (.. og så ofte
> bruger jeg heller ikke UNION), så lad mig dog igen slå et slag for
> dens querycache. For websites, der præsenterer meget af det samme
> indhold, kan den virkelig give et performance-boost, selv ved bare at
> ofre få MB RAM til dens cache.

Tak for tippet, det må jeg lige studere nærmere :)

--
Med venlig hilsen
Søren Reinke Rescue Diver Fjern ihsyd fra email
http://www.dykkercenterlangeland.dk
Danmarks hyggeligste Pinse Træf 6-9 Juni


Peter Brodersen (14-06-2003)
Kommentar
Fra : Peter Brodersen


Dato : 14-06-03 18:38

On Sat, 14 Jun 2003 17:31:53 +0200, "Søren Reinke"
<disky@disky.ihsyd.dk> wrote:

[querycache i MySQL 4.0]

>Tak for tippet, det må jeg lige studere nærmere :)

Jeg skrev på et tidspunkt en mail til et par bekendte om et par af de
nye features. Det er blot et par enkelte eksempler, og ikke nærmere
teknisk gennemgået (det kan man jo altid bruge manualen til :) - men
for what it's worth:

http://stock.ter.dk/mysql410.txt

(xfut: dk.edb.database)

--
- Peter Brodersen

Søren Reinke (14-06-2003)
Kommentar
Fra : Søren Reinke


Dato : 14-06-03 22:38

Peter Brodersen wrote:
> On Sat, 14 Jun 2003 17:31:53 +0200, "Søren Reinke"
> <disky@disky.ihsyd.dk> wrote:
>
> [querycache i MySQL 4.0]
>
>> Tak for tippet, det må jeg lige studere nærmere :)
>
> Jeg skrev på et tidspunkt en mail til et par bekendte om et par af de
> nye features. Det er blot et par enkelte eksempler, og ikke nærmere
> teknisk gennemgået (det kan man jo altid bruge manualen til :) - men
> for what it's worth:
>
> http://stock.ter.dk/mysql410.txt

Hej Peter

Nu har jeg ikke lige nærlæst hele din artikel, men det vil jeg klart gøre.

Hvad har du af erfaring med at skifte fra V3 til V4 ?

Giver det problemmer ?

--
Med venlig hilsen
Søren Reinke Rescue Diver Fjern ihsyd fra email
http://www.dykkercenterlangeland.dk
Danmarks hyggeligste Pinse Træf 6-9 Juni


Peter Brodersen (14-06-2003)
Kommentar
Fra : Peter Brodersen


Dato : 14-06-03 23:02

On Sat, 14 Jun 2003 23:37:51 +0200, "Søren Reinke"
<disky@disky.ihsyd.dk> wrote:

>Nu har jeg ikke lige nærlæst hele din artikel, men det vil jeg klart gøre.
>
>Hvad har du af erfaring med at skifte fra V3 til V4 ?
>
>Giver det problemmer ?

Jeg opgraderede blot vha. en ny Debian-pakke under linux, og jeg
oplevede ingen problemer, uden at rette nogen tabeller eller scripts.
Det var dog på et site, der godt nok har en sjat databaser, men
primært er til hobby-brug.

http://www.mysql.com/doc/en/Upgrading-from-3.23.html angiver en række
ting, man bør foretage sig, men siden nævner dog: "MySQL 4.0 will work
even if you don't do the above, but you will not be able to use the
new security privileges that MySQL 4.0 and you may run into problems
when upgrading later to MySQL 4.1 or newer. The ISAM file format still
works in MySQL 4.0 but it's deprecated and will be disabled in MySQL
5.0."

Hvis man i forvejen bruger MySQL 3.23, er det ret sandsynligt, at ens
tabeller i forvejen er af typen MyISAM og ikke ISAM.

Det forekommer mig dog, at en del finder opgraderingsvejledningen
unødigt kompliceret, og har blot kørt en mysqldump, og hældt
tabellerne og dataen ind på ny. Ovenstående webside siger også, at man
let kan nedgradere fra MySQL 4.0 til 3.23.52+ - her bør man dog blot
lave mysqldump-tricket, hvis man bruger FULLTEXT-indexes, men ellers
skulle der heller ikke være nogen problemer. Så overordnet må man
siges, at det lader til at være ret konsekvensfrit.

Hvad angår query-cache'n (som jeg har angivet som én af de større
grunde til at skifte), så er funktionaliteten aktiveret pr. default,
men cache-størrelsen er ikke sat (dvs. den er på 0 bytes). Det skal
sættes i serverens konfigurationsfil (my.cnf) - fx ved blot at tilføje
følgende linje:

query_cache_size = 1048576

1MB er måske ikke meget, men det burde være nok til at opleve
forandringen. Jeg har selv sat den til 8MB, og at lure på diverse
mailinglister har forskellige folk sat den til ca. 64MB. Menaltså,
hvis resultatet fra alle ens queries ikke fylder så meget, er der
heller ingen grund til at have en stor querycache.

--
- Peter Brodersen

Søren Reinke (14-06-2003)
Kommentar
Fra : Søren Reinke


Dato : 14-06-03 23:07


>> Hvad har du af erfaring med at skifte fra V3 til V4 ?
>>
>> Giver det problemmer ?
>
> Jeg opgraderede blot vha. en ny Debian-pakke under linux, og jeg
> oplevede ingen problemer, uden at rette nogen tabeller eller scripts.
> Det var dog på et site, der godt nok har en sjat databaser, men
> primært er til hobby-brug.
>
> http://www.mysql.com/doc/en/Upgrading-from-3.23.html angiver en række

Jeg takker endnu engang, og kan godt se hvad jeg skal lave i morgen :)

--
Med venlig hilsen
Søren Reinke Rescue Diver Fjern ihsyd fra email
http://www.dykkercenterlangeland.dk
Danmarks hyggeligste Pinse Træf 6-9 Juni


Peter Brodersen (14-06-2003)
Kommentar
Fra : Peter Brodersen


Dato : 14-06-03 15:25

On Sat, 14 Jun 2003 15:23:20 +0200, "Nikolaj Rasmussen" <tro@paa.det>
wrote:

>select id, (select count(*) from user_pcw_relations where pcw_id=pcw.id and
>signed_up=1) as hmsu from pcw
>
>... virker perfekt med mssql/access/interbase etc etc, men fejler med mysql.
>Kan det virkelig passe?? :(

Yep, subselects for almindelige mysql-tabeller kommer først med mysql
4.1.0 (i hvert fald lader det til at fungere fint i alpha-udgaven af
4.1.0)

Til gengæld kan ovenstående vist omskrives i selv gamle udgaver af
MySQL til:

SELECT pcw.id, COUNT(*) FROM pcw, user_pcw_relations WHERE pcw_id =
pcw.id GROUP BY pcw.id;


Evt. videre i nyhedsgruppen dk.edb.database.

--
- Peter Brodersen

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

Månedens bedste
Årets bedste
Sidste års bedste