2009-11-10 24 views
15

bu:MySQL - Unix zaman damgası gelen yıl seçerek kullanıyorum

SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year FROM table_name WHERE year = 2009; 

ama bana bir hata verir:

Unknown column 'year' in 'where clause'SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year FROM table_name WHERE year = 2009 

Hem "my_unix_timestamp_column" ve "tablo_ismi" doğru, ben yok neden bunu bana verdiğini biliyorum! Ben Bir sütun kullanamazsınız PHP 5.3.0

cevap

19

Bu YEAR MySQL ayrılmış bir kelime olmak ya da istediği çünkü çizgisinde bir şey yapmak mı kaynaklandığını tam olarak emin değilim:

SELECT 
    FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year 
FROM 
    table_name 
WHERE 
    FROM_UNIXTIME(my_unix_timestamp_column, '%Y') = 2009; 

son konu GROUP lemsiz sadece alakalı olup olmadığını hatırlamıyorum : S

0

kullanıyorum

olduğunu yaratmak için gerçek işlevi ile nereye fıkrada year değişkeni değiştirmek için WHERE fıkrada SELECT bölümünü oluşturdu sütun (aka FROM_UNIXTIME(my_unix_timestamp_column, '%Y')) ve iyi olmalısınız.

Sorunuzun SELECT bölümü, WHERE bölümü, eşleşen satırları döndürmek için tamamlanana kadar çalıştırılmamış olmasıdır.

+0

'SELECT' bölümüyle ilgili bölüm yanlıştır. Seni reddetmeyeceğim, ama şu sorguyu çalıştırmayı deneyeceğim: 'SET @r: = 1; SELECT @r: = id + 1 mytable WHERE @r = id'den '1''den başlayarak ardışık kimlikleri olan herhangi bir tablodan. – Quassnoi

0

WHERE bölümü, alan listesindeki takma islemden önce yürütülür. En iyi şey, WHERE yan tümcesinde BETWEEN kullanmaktır, böylece bir dizin kullanılabilir.

3
SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS `year` 
FROM table_name 
HAVING `year` = 2009 

WHERE maddesi farklı olarak, HAVING maddesi SELECT maddesi takma başvuruda bulunabilir.

Daha endeks etkili yolu olacaktır:

SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS `year` 
FROM table_name 
WHERE my_unix_timestamp_column >= UNIX_TIMESTAMP('2009-01-01') 
     AND my_unix_timestamp_column < UNIX_TIMESTAMP('2010-01-01') 
+0

, bu sorguların her ikisi de çalışırken, bu yanıt, neden ikisinin de neden maddenin “yıl” problemini çözdüğünü açıklamıyor. (Ayrıca, her ikisi de, maddede geçen yıla göre eşleştirmekten biraz daha normal bir şekilde yapılandırılmıştır) – Jehiah

3

diğer alternatif, kaçınarak tekrarlama biggish işlev çağrısı:

SELECT year 
    FROM (SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year 
      FROM table_name) AS list_of_years 
WHERE year = 2009; 

Hala anahtar sözcük olarak YIL ile çatışmaları önlemek için kelime 'yıl' etrafında arka tırnak kullanmak gerekebilir. Optimizer, bu sorguyu cevaplamak için bir ara tablo oluşturmaya gerek duymamalıdır.

İlgili konular