MySql değişkenler ve php

2 Cevap php

Ben php ile bu bir hata alıyorum. Mysql_query geçmek için bu dizeyi biçimlendirmek için doğru yolu php () nedir?

SELECT count(*) FROM agents INTO @AgentCount;

SELECT user_agent_parsed, user_agent_original, COUNT( user_agent_parsed ) AS thecount, 
    COUNT( * ) / ( @AgentCount) AS percentage
FROM agents
GROUP BY user_agent_parsed
ORDER BY thecount DESC LIMIT 50;

Php, burada ben $ sorgu kurmak nasıl

      $query = "
      SELECT count(*) FROM agents INTO @AgentCount;

      SELECT user_agent_parsed, user_agent_original, COUNT( user_agent_parsed ) AS thecount, 
          COUNT( * ) / ( @AgentCount) AS percentage
      FROM agents
      GROUP BY user_agent_parsed
      ORDER BY thecount DESC LIMIT 50";

Ben bir komut satırı oturumu aracılığıyla MySQL içine doğrudan koyarsanız o tam sorgu iyi çalışır. Ben mysql_query iki ayrı php aramaları () vermek ve ilk sonucu saklamak gerekir mi?

Ben aşağıda hata alıyorum:

Eğer SQL sözdizimi bir hata var; 3. satırda 'thecount AS SEÇİN user_agent_parsed, user_agent_original, COUNT (user_agent_parsed) yakınındaki kullanılacak doğru sözdizimi için MySQL sunucu sürümü karşılık kılavuzunu kontrol

Seçeneğini bir alt kullanarak ve yerine MySQL değişkeni seçmek için değil sebebi, her yüzdelik hesaplaması oluyor sayımını () kaçınmaktır. Mümkün olabilir ama motoru için optimize edilmiştir. Şimdiye kadar, bunu teyit etmek mümkün olmamıştır. Ben de alt seçtiği hemen hemen her zaman sigara optimal duydum.

Bana bunu söyler İZAH:

id  select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1   PRIMARY	agents	index	NULL	user_agent_parsed	28	NULL	82900	Using temporary; Using filesort
2   SUBQUERY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away

2 Cevap

Siz sadece PHP bir anda bir sorgu olabilir.

 $query1 = "SELECT count(*) FROM agents INTO @AgentCount"
 $query2="  
  SELECT user_agent_parsed, user_agent_original, COUNT( user_agent_parsed ) AS thecount, 
  COUNT( * ) / ( @AgentCount) AS percentage
  FROM agents
  GROUP BY user_agent_parsed
  ORDER BY thecount DESC LIMIT 50";

UPDATE

Ben bütün qieries içeren bir DAL var. Benim DAL tipik bir işlev şöyle:

// These functions are reusable 
  public function getAllRows($table)
  {
    $sql =" SELECT * FROM $table";
    $this->query($sql);
    return $this->query_result;       
  }

Sonra benim BLL'deki (Busines Layer) ben şu var:

  public function getUserAgents()
  {
    $result = parent::getAllRows();
    $row = mysql_fetch_array($result);
    return $row[0]; // Retrieves the first row

   // Then you take this value and to a second request. Then return the answer / rows.
  }

Eğer kullanıyorsanız mysql_query, o zaman evet, ayrı ayrı her bir sorgu göndermek gerekir. Üstündeki açıklama itibaren mysql_query 's entry in the PHP manual: "mysql_query () şu anda etkin veritabanına benzersiz bir sorgu (birden fazla sorgu desteklenmez) gönderir ..."

Altsorgular gibi, şaşıracaksınız; Sorgu iyileştirici genellikle onları çok iyi işler.