I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Slettet bruger
15. juli 2004 - 21:34#1
Du prøver at udskrive noget, som ikke er en normal variable, men bare er et resource id. Det kan for eksempel være resultatet fra en mysql_query() eller en fopen() eller andre lignende ting, der ikke indeholder information i sig selv, men bare er et "håndtag", som kan bruges til at få fat i information.
<? require "database.php"; //titlen $title = "Brugere"; //querien til at finde medlemmer $brugq = mysql_query("SELECT * FROM medlemmer") or die(mysql_error()); //antallet af medlemmer $antal = mysql_num_rows($brugq); //wile løkken while($raew = mysql_fetch_array($brugq)) {
Fejlen er nødt til enten at være et sted, hvor du fylder i variabler til udskrift, eller hvor du udskriver. Hvis den kode, du har vist her er hele din side, så er fejlen i database.php et sted.
Synes godt om
Slettet bruger
15. juli 2004 - 22:08#8
hvis jeg fjerner:
//querien til at finde medlemmer $kh = mysql_query("SELECT * FROM medlemmer ORDER BY oprettet ASC") or die(mysql_error());
Du skal nu også have rettet <tr> <td height=\"25\">$yf[nick]</td> <td>$yf[mail]</td> <td>$opret</td> </td> til <tr> <td height=\"25\">$yf[nick]</td> <td>$yf[mail]</td> <td>$opret</td> </tr>
Så står fejlbeskeden måske det rigtige sted. Husk altid at lave en HTML-varlidering af dine sider.
Synes godt om
Slettet bruger
15. juli 2004 - 22:17#13
jeg bruger også database.php på alle mine andre sider, og der kommer det ikke det der "resource id"
Synes godt om
Slettet bruger
15. juli 2004 - 22:18#14
ja det har jeg også haft gjort ^^, men det virkede også med </td> :?
$daag = mysql_query("SELECT * FROM medlemmer WHERE oprettet>'$start'"); $toda = mysql_num_rows($daag); $koe = mysql_query("SELECT count(distinct ip) AS antal, tid FROM counter GROUP BY tid ORDER BY antal DESC LIMIT 0,1") or die(mysql_error()); $hoejst = mysql_fetch_array($koe); $hojst = $hoejst['antal']; $dat = explode("-", $hoejst['tid']); $dathj = mktime(0, 0, 0, $dat[1], $dat[2], $dat[0]); $datj = date("d/m-y", $dathj);
$brugere = hentAntal("SELECT * FROM medlemmer"); $online = hentAntal(SELECT * FROM online");
osv.
Synes godt om
Slettet bruger
15. juli 2004 - 22:34#30
så sparer jeg mysql_num_rows oder was?
Synes godt om
Slettet bruger
15. juli 2004 - 22:36#31
Ja, plus at dine queries bliver afsluttet med det samme, der ikke er brug for dem mere, så serveren ikke spilder hukommelse på at huske dem til dit script afslutter.
Jeg ville nu nok sige $brugerq = mysql_query("SELECT count(*) as antal FROM medlemmer"); ...eller tilsvarende... og så aflæse feltet antal. Min intuition siger at det er mere effektivt.
Synes godt om
Slettet bruger
15. juli 2004 - 22:40#34
ok, hvis jeg har den er $brugerq[antal] så lig med antallet af rækker i medlemmer?
Synes godt om
Slettet bruger
15. juli 2004 - 22:40#35
Det er nok rigtigt. Så skal alle queries til det bare skrives om.
Synes godt om
Slettet bruger
15. juli 2004 - 22:41#36
Nej, den skal hentes med en af mysql_fetch_*-funktionerne først.
Synes godt om
Slettet bruger
15. juli 2004 - 22:42#37
hvad er så fordelen ved at count(*) og fetch, i forhold til en alm ' og num_rows?
Synes godt om
Slettet bruger
15. juli 2004 - 22:43#38
Med count(*) skal Mysql ikke til at gøre sig parat til at sende dig alle de rækker, du alligevel ikke gider have, for så ved den, at du bare vil tælle.
Fordelen er at sql-serveren ved at den kun skal give dig een række med eet felt, og ikke alt, som en "SELECT * FROM ..." lægger op til. Derfor vil det være muligt for sql-serveren at gøre det hurtigere. Om den reelt gør det mærkbart hurtigere ved jeg så ikke, men det er god skik ikke at bede om mere end man skal bruge.
Synes godt om
Slettet bruger
15. juli 2004 - 22:45#41
ok, hvis man altid kun beder om det man skal bruge, kan man måske mærke det i sidste ende ?
Synes godt om
Slettet bruger
15. juli 2004 - 22:50#42
Det vil jeg tro. Uden at have undersøgt nærmere, hvordan MySQL fungerer internt, vil jeg tro, at når man sender en query, vil den klargøre hele resultatet, og derefter sende rækkerne en af gangen, når man beder om dem. Og alt andet lige, vil det nok kunne mærkes på antallet af brugere, som systemet kan holde til, om man beder om hele tabeller eller enkelte tal, når man gør det så tit.
Men snakker vi store databaser, rigtigt store, så vil både struktur af databasen, og de tilhørende forespørgsler have afgørende betydning for effektiviteten.
Synes godt om
Slettet bruger
15. juli 2004 - 22:53#44
ok så har jeg lige en lille ting mere
jeg vil godt have at hvis man ikke har været logget på i 100 dage, skal "inaktiv" i databasen være '1'.
men jeg tror at det her er en dum idé:
//finder ud af om nogle er inaktive $mange = 60*60*24*100; $sidst_set = $nu-$mange mysql_query("UPDATE medlemmer SET inaktiv='1' WHERE sidst<'sidst_set'");
//finder ud af om nogle ikke er inaktive
mysql_query("UPDATE medlemmer SET inaktiv='0' WHERE sidst>'$sidst_set'");
Synes godt om
Slettet bruger
15. juli 2004 - 22:53#45
da det jo løber alle brugere igennem, kan det passe?
Synes godt om
Slettet bruger
15. juli 2004 - 22:54#46
"sidst" i tabellen 'medlemmer' er den dato i time() man var online sidst
Synes godt om
Slettet bruger
15. juli 2004 - 23:00#47
Ja, de to til sammen, vil update alle medlemmer (Men muligvis har MySQL en optimering, der får den til at ignorere updates, der ikke ændrer noget...)
Du kan rette dem til
mysql_query("UPDATE medlemmer SET inaktiv='1' WHERE sidst<'$sidst_set' and inaktiv=0");
og
mysql_query("UPDATE medlemmer SET inaktiv='0' WHERE sidst>'$sidst_set' and inaktiv=1");
Derudover kan den anden gøres overflødig vedsimpelthen at sætte inaktiv=0, når du alligevel sætter sidst-feltet.
Hvorfor have et felt, inaktiv, når du kan se det på 'sidst'-feltet. Det kræver bare at du bruger din SELECT sætning lidt anderledes, eller laver en lille beregning når du viser status.
Derved vil du også nemmere kunne ændre de 100 dage til noget andet, eller have en mellemting: lidt inaktiv.
Groft sagt vil du få redundans, dvs. ens og overflødig, information i tabellen, når 'inaktivt' og 'sidst' har den kobling.
Synes godt om
Slettet bruger
15. juli 2004 - 23:07#50
nåh ja... thx erik..!
Synes godt om
Slettet bruger
15. juli 2004 - 23:10#51
Her er en ny funktion til dig. Den virker lidt anderledes end den første.
Det vil sige, den skal have navnet på tabellen, den skal tælle, og en eventuel betingelse.
Synes godt om
Slettet bruger
15. juli 2004 - 23:10#52
Og en rettelse:
function hentAntal($tabel, $where=''){ if(!empty($where)){$where="WHERE " . $where;} $result=mysql_query("SELECT COUNT(*) as antal FROM $tabel $WHERE"); if($result){ $row=mysql_fetch_assoc($result) $antal=$row['antal']; mysql_free_result($result); } else { $antal=false; } return $antal; }
Synes godt om
Slettet bruger
15. juli 2004 - 23:12#53
thx
Synes godt om
Slettet bruger
15. juli 2004 - 23:12#54
Og en rettelse mere:
function hentAntal($tabel, $where=''){ if(!empty($where)){$where="WHERE " . $where;} $result=mysql_query("SELECT COUNT(*) as antal FROM $tabel $where"); if($result){ $row=mysql_fetch_assoc($result) $antal=$row['antal']; mysql_free_result($result); } else { $antal=false; } return $antal; }
Synes godt om
Slettet bruger
15. juli 2004 - 23:13#55
jeg går i seng nu.. men tak for det sand og erik ^^
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.