Avatar billede thorus Nybegynder
07. maj 2003 - 14:57 Der er 10 kommentarer og
2 løsninger

mysql_close() ????

Er det vigtigt at lukke en

mysql_connect($mysql_host,$mysql_user,$mysql_password);
mysql_select_db("$mysql_db");

Jeg har cirka 100 onlien heletiden og siderne er meget langsomme.
Avatar billede sthen Nybegynder
07. maj 2003 - 15:02 #1
Sidernes hastighed hænger nok nærmere sammen med mængden af users frem for at du ikke får afsluttet din mysql_connect.

Mener faktisk ikke at det betyder en døjt for hastigheden at du ikke lukker.
Avatar billede thorus Nybegynder
07. maj 2003 - 15:04 #2
<?
session_start();
ob_start(); 
?>
<head>
<meta HTTP-EQUIV="REFRESH" CONTENT="20">
</head>
<?
$mysql_host = ".dk";
$mysql_user = "";
$mysql_password = "";
$mysql_db = "";

mysql_connect($mysql_host,$mysql_user,$mysql_password);
mysql_select_db("$mysql_db");


# ONLINE BRUGERE START


$ip = $REMOTE_ADDR;

$time = explode(" ",microtime());
$array1 = $time[0];
$array2 = $time[1];

    $r = mysql_fetch_row( mysql_query("SELECT * FROM online_users WHERE ip like '$ip'"));
    if ($r == (false))  {
    mysql_query("INSERT INTO online_users (id,ip,name,date) values ('','$ip','','$array2')");
    }
    else
    {
    mysql_query("UPDATE online_users SET name = '$userid' WHERE ip = '$ip'");   
    }
mysql_query("DELETE FROM online_users where date < $array2 - 1500");

$check = mysql_query("SELECT * FROM bruger_post where laest='0' and til_Id='$bruger_id' and til_slet = '0' and til_popup = '0'") or die (mysql_error());


    if(mysql_num_rows($check) != 0) {

$res1 = mysql_query("SELECT * FROM bruger_post where laest='0' and til_Id='$bruger_id' and til_slet = '0'") or die (mysql_error());
    while($row1 = mysql_fetch_array($res1))
      {       
        mysql_query("UPDATE bruger_post set til_popup = '1' where post_Id = '{$row1["post_Id"]}'");
        }
?>

<script language="javascript">
var popup = window.open("besked.php", "hh", ",left=180,top=200,width=200,height=10,status=0,resizable=0,scrollbars=0,menubar=0,toolbar=0");
</script>
<?php
   
                    }


?>

den bliver loadet af brugerne når de er online hvert 20 sec.. kunne en mysql_clsoe hjælpe der? og hvor
Avatar billede fri-hash Nybegynder
07. maj 2003 - 15:05 #3
det kommer meget an på hvor mange kald der laves, hvilke kald det er og hvor meget data der er i basen, samt hvordan selve basen er bygget op

men det er absolut god kodestil at lave et DB-udtræk noget i denne retning

$query = " SELECT something or whatever";
$conn = mysql_connect(.....) or die(mysql_error());
mysql_select_db(...) or die(mysql_error());
$res = mysql_query($query) or die(mysql_error());
mysql_close($conn);

altså, åbn basen, udfør query, luk igen . . . . din $res er stadig tilgængelig selvom conection lukkes
Avatar billede thorus Nybegynder
07. maj 2003 - 15:09 #4
i det eks. jeg har vedlagt hvordan skal den laves så den er optimeret?
Avatar billede disky Nybegynder
07. maj 2003 - 15:10 #5
Er der ikke noget med man kan fortælle PHP den skal bruge connection pooling på forbindelserne ?

Det at oprette en forbindelse til databasen tager ofte længere tid end selve querien egentligt gør !
Avatar billede thorus Nybegynder
07. maj 2003 - 15:12 #6
Fri-hash -> samt hvordan selve basen er bygget op
dvs. hvis man bruger en del SELECT * i tabeller hvor der er et par tusind eks. profiler så kan det godt være derfor?
Avatar billede erikjacobsen Ekspert
07. maj 2003 - 15:14 #7
mysql_pconnect vil måske (hvis det understøttes) lave en
connection-pooling. Ellers vil den være ækvivalent med
mysql_connect. Man man skal først kigge grundigt på antal
sql-kald, at man kun henter hvad man skal bruge, at man laver
passende indexer på "vigtige" felter.
Avatar billede erikjacobsen Ekspert
07. maj 2003 - 15:15 #8
Dit "ip"-felt bør fx. være indexeret.
Avatar billede thorus Nybegynder
07. maj 2003 - 15:16 #9
ok ser lige om den er
Avatar billede thorus Nybegynder
07. maj 2003 - 15:26 #10
det var den sørme ikke..
Avatar billede erikjacobsen Ekspert
07. maj 2003 - 15:26 #11
I din update, sætter du da dit dato felt igen?

Ellers kan du spare et sql-kald:

  1) Lav din update
  2) Check mysql_affected_rows
  3) Hvis der er 0, skal du så lave en insert

Før havde du altid 2 sql-kald, nu har oftest 1, sommetider 2.

Du kan spare dit "id"-felt, hvis du opfatter din "ip" som
primær nøgle (hvis man kan det: 2 brugere på samme IP??? Men
det problem har du også nu).
Avatar billede thorus Nybegynder
07. maj 2003 - 15:33 #12
den er sådan her..

$ip = $REMOTE_ADDR;

$time = explode(" ",microtime());
$array1 = $time[0];
$array2 = $time[1];

    $r = mysql_fetch_row( mysql_query("SELECT * FROM online_users WHERE ip like '$ip'"));
    if ($r == (false))  {
    mysql_query("INSERT INTO online_users (id,ip,name,date) values ('','$ip','','$array2')");
    }
    else
    {
    mysql_query("UPDATE online_users SET name = '$userid' WHERE ip = '$ip'");   
    }
mysql_query("DELETE FROM online_users where date < $array2 - 1500");

$res = mysql_query("SELECT * FROM online_users");
$tal = mysql_num_rows($res);
{
$online = $tal;
}
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester