2012-04-22 41 views
0

我有此表的數據庫,名爲data table data與行SUBSTR數據寫入SQL

,我想使這個SQL

 $sql = mysql_query("SELECT $menucompare,(substr($menucompare, 13, 2)) AS dayname FROM data WHERE ... "); 

觀測數據

$menucompare // is variable which the date is selected from table(date or date2 or date3..) 

可以說,我們有這一日期來自04/10/2012-(Tuesday),在6周之下,因此在減量正如它在sql中所表示的那樣將是Tu

在第7周有2個日期之一。 我要的是輸出由每週按天訂購的天名

爲例像

week 7 

    Tu 
    Fr 
    . 
    . 

week 6 
Tu 
. 
. 

能這樣呢?有沒有一種特殊的WHERE條款嗎? 是否有可能寫的SQL在哪裏分析有多少日期在本週 例如第7周的表中有多少日期,在第7周有2個

回答

1

你已經問了幾個不同的問題但在嘗試直接解決它們之前,可能需要考慮(如果可能)將date列的數據類型更改爲DATE類型,然後使用諸如DATE_FORMAT(`date`, "%a")之類的函數來獲取相關日期名稱的第一個字符。

另外,從另一種語言插入變量到SQL語句時,請注意避免惡意SQL注入:請考慮使用prepared statements。不幸的是,在這種情況下要這樣做,由於數據庫設計,您會遇到另一個問題:有關更多信息,請參見this question

在您的問題:

  1. 可以在這個中所示的輸出示例]發生嗎?

    是的,它可以。你想「分組」你的結果,所以看看GROUP BY子句到SELECT聲明。嘗試這樣的命令:

    SELECT 
        `w_date`, 
        GROUP_CONCAT(SUBSTR(`date`, 13, 2) SEPARATOR "\n") AS `daynames` 
    FROM `data` 
    WHERE ... 
    GROUP BY `w_date`; 
    

    正如你所看到的,結果被你所希望的方式進行分組 - 但天縮寫的列表是一個單獨的結果列於週數;精確地輸出數據,如圖所示,這是進一步操作,必須在應用程序級別進行。

  2. 是有可能寫sql其中claculating許多日期是如何在一週爲例許多日期在7個星期

    是的,絕對是如何。要獲得總記錄數給定的一週:

    SELECT COUNT(*) FROM `data` WHERE `w_date` = 7; 
    

    或爲不同天給定的一週內數:

    SELECT COUNT(DISTINCT `date`) FROM `data` WHERE `w_date` = 7; 
    

    或獲得這樣的,每星期:

    SELECT `w_date`, COUNT(*) FROM `data` GROUP BY `w_date`; 
    
+0

thx從你身邊很清楚只是想要的事情我會很高興,如果你能清除它給我,是爲了避免sql漏洞注入,im在這個不好。你的意思是我最好避免在sql中創建變量? – 2012-04-23 14:54:50

+0

@ user1291295:http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain – eggyal 2012-04-23 16:30:36