/ 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
Optimering af query!
Fra : YJ


Dato : 11-03-06 14:48

Jeg ønsker at returnere et array der indeholder x hashes.

Dette kan jeg gøre således:

GET DATA:
$Data = mysql_query ("SELECT * FROM [TABLE]") or die
(mysql_error());
while ($hr[]= mysql_fetch_array ($Data, MYSQL_ASSOC))
{
}


OUTPUT DATA:
foreach ($hr as $hr2)
{
echo $hr2 ["Name"] ."<br>";
}


Er der ikke bedre metoder end at populere $hr[] med en while der er tom?


I bund og grund ønsker jeg bare en hash retur som i Perl, hvor man får hele
bunken i eet kald og så kan programmet ellers iterere over den.

YJ



 
 
Jeppe Bundsgaard (11-03-2006)
Kommentar
Fra : Jeppe Bundsgaard


Dato : 11-03-06 15:09

YJ wrote in dk.edb.internet.webdesign.serverside.php:
> Jeg ønsker at returnere et array der indeholder x hashes.
>

Kan du ikke bare gøre sådan her?

$Data = mysql_query ("SELECT * FROM [TABLE]") or die
(mysql_error());
while ($hr= mysql_fetch_array ($Data, MYSQL_ASSOC))
{
echo $hr ["Name"] ."<br>";

}
mvh
jeppe

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

YJ (11-03-2006)
Kommentar
Fra : YJ


Dato : 11-03-06 15:10


"Jeppe Bundsgaard" <jeppe@bundsgaard.bet> wrote in message
news:4412d9ff$0$15787$14726298@news.sunsite.dk...
> YJ wrote in dk.edb.internet.webdesign.serverside.php:
> > Jeg ønsker at returnere et array der indeholder x hashes.
> >
>
> Kan du ikke bare gøre sådan her?

Det er et forsimplet eksempel,så nej.

YJ



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


Dato : 11-03-06 20:31

YJ wrote:
> Jeg ønsker at returnere et array der indeholder x hashes.
>
> Dette kan jeg gøre således:
>
> GET DATA:
> $Data = mysql_query ("SELECT * FROM [TABLE]") or die
> (mysql_error());
> while ($hr[]= mysql_fetch_array ($Data, MYSQL_ASSOC))
> {
> }
>
>
> OUTPUT DATA:
> foreach ($hr as $hr2)
> {
> echo $hr2 ["Name"] ."<br>";
> }
>
>
> Er der ikke bedre metoder end at populere $hr[] med en while der er tom?

Det ovenstående kan ikke rigtig blive hurtigere, hvis du reelt ønsker at
stoppe hele resultatet i en datastruktur.

> I bund og grund ønsker jeg bare en hash retur som i Perl, hvor man får hele
> bunken i eet kald og så kan programmet ellers iterere over den.

Det betyder at du kommer til at lave to gennemløb på dine forespørgsler,
frem for ét i den situation hvor man skriver ud i takt med at man henter
data. Hvis du skal bruge datasættet flere gange, kan det selvfølgelig
give mening.

Hvis du ønsker at frakoble forespørgslen fra den kode, der bruger
resultatet (f. eks. fordi den kode, der bruger resultatet skal kunne
håndtere data fra mange forskellige tabeller), kan du overveje at lave
callbacks i stedet for.

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

YJ (11-03-2006)
Kommentar
Fra : YJ


Dato : 11-03-06 20:39


> Det ovenstående kan ikke rigtig blive hurtigere, hvis du reelt ønsker at
> stoppe hele resultatet i en datastruktur.

Øv.
Håbede på der fandtes en php-ækvivalent til get_all_rows

> Det betyder at du kommer til at lave to gennemløb på dine forespørgsler,
> frem for ét i den situation hvor man skriver ud i takt med at man henter
> data. Hvis du skal bruge datasættet flere gange, kan det selvfølgelig
> give mening.

Ja, det skal bruges flere gange.


> Hvis du ønsker at frakoble forespørgslen fra den kode, der bruger
> resultatet

Det er netop en af pointerne.
Jeg har en database klasse, som laver alle udtræk og de andre
klasser/funktioner der skal bruges data kalder så databaseklassen, og får en
hash retur. De kommer således aldrig til at opleve hvis jeg skifter database
eller ændrer på strukturen i databasen.

(f. eks. fordi den kode, der bruger resultatet skal kunne
> håndtere data fra mange forskellige tabeller), kan du overveje at lave
> callbacks i stedet for.

Kender ikke callbacks, men det kan jeg nok finde i manualen.

Tak for svaret.

YJ



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


Dato : 11-03-06 20:52

YJ wrote:
>>Det ovenstående kan ikke rigtig blive hurtigere, hvis du reelt ønsker at
>>stoppe hele resultatet i en datastruktur.
>
> Øv.
> Håbede på der fandtes en php-ækvivalent til get_all_rows

Det fremgår af dokumentationen at den ikke findes.

>>Det betyder at du kommer til at lave to gennemløb på dine forespørgsler,
>>frem for ét i den situation hvor man skriver ud i takt med at man henter
>>data. Hvis du skal bruge datasættet flere gange, kan det selvfølgelig
>>give mening.
>
> Ja, det skal bruges flere gange.

Så er der nok ikke så meget andet at gøre, med mindre du kan arrangere
dine klasser i et hieraki, der sender data-events til hinanden a'la SAX.

>>Hvis du ønsker at frakoble forespørgslen fra den kode, der bruger
>>resultatet
>
> Det er netop en af pointerne.
> Jeg har en database klasse, som laver alle udtræk og de andre
> klasser/funktioner der skal bruges data kalder så databaseklassen, og får en
> hash retur. De kommer således aldrig til at opleve hvis jeg skifter database
> eller ændrer på strukturen i databasen.

Og du har kasseret de frameworks, der alleede er lavet til det?

> Kender ikke callbacks, men det kan jeg nok finde i manualen.

Callbacks er ikke PHP-specifikt, men en metode til at overdrage
kontrollen til den del af koden, der laver forespørgselen. Her er noget
pseudokode:

klasse DataForbruger {

   metode aftagNogetData(Array rækkeMedData) {
      <<gør noget ved den modtagne række med data>>
   }

}

minDataForbruger = ny(Dataforbruger);
handle = sql_forespørgsel(<<sql>>);
sålænge(data = handle->hent_data()) {
   minDataForbruger->aftagNogetData(data);
}

Så kan man aflevere data til flere aftagere på en gang (put det ind i
løkken ovenfor og man kan have indlejrede aftagere. Det er en
arkitektur, man kan kalde for fetch-event-dreven, som er specielt egnet
til hurtig behandling af data. Jeg har brugt det til f. eks. at
processere ekstremt store XML-filer (den største var omkring 18 GB).

Fordelene er altså at man kan processere meget store mængder data meget
hurtigt. Ulemperne er, at man kan blive nødt til at cache data rundt
omkring, for at få mulighed for at behandle det korrekt. Enkelte steder
var jeg også nødt til at lave nogle temmeligt mærkelige
callback-mekanismer, for at få koblet data sammen, som forekom med meget
stor spredning i filen.

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

YJ (11-03-2006)
Kommentar
Fra : YJ


Dato : 11-03-06 21:05

> Så er der nok ikke så meget andet at gøre, med mindre du kan arrangere
> dine klasser i et hieraki, der sender data-events til hinanden a'la SAX.

Jo det kan jeg sikkert godt, hvis jeg vidste hvad det var
Det er mit første OOP program i php, så SAX er nyt for mig.


> Og du har kasseret de frameworks, der alleede er lavet til det?

Nææ. Jeg kender dem bare ikke.
Hvad hedder de?


> > Kender ikke callbacks, men det kan jeg nok finde i manualen.
>
> Callbacks er ikke PHP-specifikt, men en metode til at overdrage
> kontrollen til den del af koden, der laver forespørgselen. Her er noget
> pseudokode:

Fedt. Det må jeg lige se om jeg kan få gennemskuet.
Det lyder afgjort smart som du forklarer det.

Stor tak for din hjælp!

YJ



Jacob Atzen (11-03-2006)
Kommentar
Fra : Jacob Atzen


Dato : 11-03-06 22:54

On 2006-03-11, YJ <sdf@dsf.sdf> wrote:
>> Og du har kasseret de frameworks, der alleede er lavet til det?
>
> Nææ. Jeg kender dem bare ikke.
> Hvad hedder de?

PDO kan i alt fald gøre din kode tæt på database neutral. Det er en del
af PHP fra 5.1. Se http://www.php.net/pdo for mere information.

--
Med venlig hilsen
- Jacob Atzen

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


Dato : 13-03-06 02:06

Jacob Atzen wrote:
> On 2006-03-11, YJ <sdf@dsf.sdf> wrote:
>>> Og du har kasseret de frameworks, der alleede er lavet til det?
>> Nææ. Jeg kender dem bare ikke.
>> Hvad hedder de?
>
> PDO kan i alt fald gøre din kode tæt på database neutral. Det er en del
> af PHP fra 5.1. Se http://www.php.net/pdo for mere information.
>

Der er også PEAR's DB - http://pear.php.net/db

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste