Gå til innhold

Anbefalte innlegg

Skrevet

Heisann. Jeg skulle gjerne fått opp på siden min hvor mange queries som er executed.

 

Slik som på denne siden: Klikky (nederst til høyre).

 

Hvilke mysql kode gjør det?

Videoannonse
Annonse
Skrevet

Hvor mange queries som er executed? Norsk eller engelsk man skriver her?

 

Uansett finnes det vel ikke en kjemperask måte å gjøre dette på, med mindre du mekker en egen funksjon eller lignende som alle spørringer kjøres gjennom og som teller.

Skrevet (endret)

Tipper den sida bruker PHP til å telle antall spørringer.

 

Nå vet ikke jeg hvilket språk du bruker, men i php kan du gjøre slik:

 

class Database
{
public $queries = 0;

public function query($sql)
{
	$this->queries++;
	return mysql_query($sql);
}
}

$db = new Database();
$db->query("SELECT * FROM table");

// Printe antall spørringer.
print $db->queries;

 

Så kaller du query metoden istedenfor mysql_query.

Endret av hans3k
Skrevet (endret)

les litt om OOP, her er et sammendrag av de tre linjene:

1: instansierer klassen Database()

2: kaller metoden query med sql-spørringen som parameter

3: printer ut innholdet i variabelen $queries.

 

Uansett er den klassen ubrukelig hvis du er interessert i resultatet av spørringen (den kan selvsagt bygges ut til å returnere resource fra mysql_query), og jeg ville også sagt at det var dårlig design å lage queries som en public variabel. Jeg ville heller satt den som private og laget metoden GetQueryCount().

Endret av hockey500
Skrevet
class Database
{
public $queries = 0;

public function query($sql)
{
	$this->queries++;
	return mysql_query($sql);
}
}

 

 

.. Hvis man først skal gjøre dette, kan man liksågjerne gjøre det ordentlig (mer objekt orientert that is) :-)

 

Mitt forslag, som jeg rabla ned nå og som på ingen måte er testkjørt :-)

/**
* DB er klassen som spørringer nå kjøres igjennom
*
* Denne klassen utvider MySQLi klassen, som er den vi vanligvis ville
* brukt til å kjøre spørringer igjennom. 
*
* For de som ikke helt er med på dette vil det si at klassen 
* DB nå inneholder alt MySQLi gjør, men at vi også har mulighet 
* til å utvide og overskrive (med mindre de er deklarert 'final')
* funksjoner i MySQLi objektet.
*
* De statiske funksjonene + funksjonene som jobber opp i mot $queries er eksempler
* på utvidelse. query-funksjonen er eksempel på å overskrive MySQLi sin funksjon
* Vi kan fortsatt bruke MySLQi sin query funksjon via parent::  
*/
class DB extends MySQLi {

 // Her lagres alle spørringene
 private $queries = Array();

 /**
  * Privat konstruktør, instansieres via static functions.
  * Dette gjør det relativt oversiktlig og enkelt å gjøre om 
  * på hvordan oppkobling til DB gjøres
  * 
  * @return DB	 DB objekt
  */
 private function __construct($host, $brukernavn, $passord, $schema) {
$this->connect($host, $brukernavn, $passord, $schema); // Kaller på superklassens funksjon..
 }


 public static function connectTilDB1() {
return new DB("db1.sql.no", "1", "abc", "db1");
 }

 public static function connectTilDB2() {
return new DB("db2.sql.no", "2", "qwe", "db2");
 }

 /**
  * Alle sprringer blir kjørt igjennom denne, som igjen kaller på 
  * sin superklasses query funksjon, altså MySQLi. 
  * 
  * @param	 String	$query	  Spørringen
  * @param	 boolean   $logQuery   Skal spørringen logges?
  * @access public
  * @return void
  */
 public function query($query, $logQuery = true) {
if ( $logQuery ) {
  /**
   * Her kunne vi jo fint også logget tidspunkt, minnebruk etc,
   * så istedenfor å bare logge spørringen, puttet inn en array med
   * mer info isteden :-)
   */
  $this->queries[] = $query;
}
return parent::query($query);
 }


 public function getAntallQueries() {
return count($this->queries);
 }

 public function getQueries() {
return $this->queries;
 }

 /**
  * Henter ut en bestemt Query
  * 
  * @param	 int			   $qnr	Query nr
  * @return	String | false			Spørringen eller false hvis query nummer ikke fantes
  */
 public function getQueryNummer($qnr) {
if ( ! is_numeric($qnr) ) {
  throw new Exception("Query nummer ($qnr) må være et tall!");
}

$query = false;

if ( array_key_exists($qnr, $this->getQueries()) ) {
  $query = $this->queries[$qnr];
}

return $query;
 }
}

/**
* Eksempel på bruk: 
*/
$db = DB::connectTilDB1();
$query = <<<EOSQL
 SELECT 
h.id, h.felt1, h.felt2, h.felt3, 
e.felt1, e.felt2
 FROM 
hovedtabell			 AS h
LEFT JOIN enAnnenTabell AS e USING(id)
 WHERE 
id = 1
EOSQL;

if ( $resultat = $db->query($query) ) {
 /**
  * Query funksjonen som ble deklarert over er den som blir kjørt, spørringen blir logget,
  * og vi får resultatet vårt i fra MySQLi objektet som vanlig.. 
  */
 if ( $rad = $resultat->fetch_assoc() ) {
// Gjør ting og tang her :-)
 }
}

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...