* Seçmek, max (tarih) phpMyAdmin ama benim kod çalışır

2 Cevap php

Tamam, benim deyimi benim php sayfasında bunu beklemek ne kadar değil phpMyAdmin iyi yürütür, ama.

Bu benim ifadedir:

SELECT `egid`, `group_name` , `limit`, MAX( `date` )
  FROM employee_groups
 GROUP BY `egid`
 ORDER BY `egid` DESC ;

Bu olabilir tablo:

CREATE TABLE `employee_groups` (
  `egid` int(10) unsigned NOT NULL,
  `date` date NOT NULL,
  `group_name` varchar(50) NOT NULL,
  `limit` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`egid`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Ben, örneğin, grupların en son listesini çıkarmak istiyorum Bir grup değiştirilmesi durumunda sadece son değişikliği istiyorum. Ve ben bir listesi (tüm gruplar) olarak ihtiyacımız var.

2 Cevap

Sorgunuz kırılmış olabilir. Aşağıdaki iki koşullardan biri geçerli olmadıkça tarafından grubunda olmayan alanları seçmek gerekir:

  • Bir toplama işlevi kullanın.
  • Değeri sütun göre gruplandırılmış ilgili işlevsel bağlıdır.

Iki alan group_name ve limit bu kuralları kırmak için görünür. Bu, bu sütunlar için belirsiz sonuçlar almak anlamına gelir.

Eğer grup başına max seçmek için çalışıyorsanız, o zaman biraz farklı bir tekniği kullanmak gerekir. See you kullanabilirsiniz çeşitli yöntemler için Quassnoi 's makale MYSQL: Selecting records holding a groupwise maximum.

İşte bunu yapmanın bir yolu var:

SELECT  di.*
FROM    (
        SELECT   egid, MAX(date) AS date
        FROM     employee_groups d
        GROUP BY egid
        ) dd
JOIN    employee_groups di
ON      di.egid = dd.egid AND di.date = dd.date

Toplama işlevleri, mysql de sql standart farklı çalışacaktır. değerini erişmek için max(date) php, bunu diğer ad var:

 SELECT `egid`, `group_name` , `limit`, MAX( `date` ) as maxdate
 FROM …

Eğer daha sonra php başka herhangi bir sütunu gibi seçebilirsiniz

 while($row = mysqli_fetch_row($result)) {
   echo htmlspecialchars($row['maxdate']);
 }

Bu umut olur