2013-12-17 145 views
0

我需要幫助將sql查詢中的值存儲到變量中。問題是爲了得到適當的值,我寫了一個很長的UNION查詢。只有兩列,並沒有多少結果。理想情況下,我想爲每行創建一個變量,其中變量名稱是第一列的結果,該變量的相應值將是第二列的結果。將mysql行數據存儲到php變量名稱和值中

這裏是聯合查詢:

SELECT 'mon_m' as shift, count(mon_m) as count 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND mon_m <> '' 

UNION 

SELECT 'mon_a', COUNT(mon_a) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND mon_a <> '' 

UNION 

SELECT 'mon_n', COUNT(mon_n) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND mon_n <> '' 

UNION 

SELECT 'tue_m', count(tue_m) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND tue_m <> '' 

UNION 

SELECT 'tue_a', COUNT(tue_a) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND tue_a <> '' 

UNION 

SELECT 'tue_n', COUNT(tue_n) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND tue_n <> '' 

UNION 

SELECT 'wed_m', count(wed_m) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND wed_m <> '' 

UNION 

SELECT 'wed_a', COUNT(wed_a) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND wed_a <> '' 

UNION 

SELECT 'wed_n', COUNT(wed_n) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND wed_n <> '' 

UNION 

SELECT 'thu_m', count(thu_m) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND thu_m <> '' 

UNION 

SELECT 'thu_a', COUNT(thu_a) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND thu_a <> '' 

UNION 

SELECT 'thu_n', COUNT(thu_n) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND thu_n <> '' 

UNION 

SELECT 'fri_m', count(fri_m) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND fri_m <> '' 

UNION 

SELECT 'fri_a', COUNT(fri_a) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND fri_a <> '' 

UNION 

SELECT 'fri_n', COUNT(fri_n) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND fri_n <> '' 

UNION 

SELECT 'sat', count(sat) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND sat <> '' 

UNION 

SELECT 'sun', COUNT(sun) 
FROM schedule 
WHERE week_of = '2013-12-23' 
AND sun <> '' 

這裏的數據想什麼小樣本:

ColumnA ColumnB 
mon_m  1 
mon_a  5 
mon_n  6 
tue_m  3 
tue_a  6 
tue_n  2 

我需要使用PHP這樣我就可以建一個表來訪問這些值。我想使用變量訪問它們。例如:

echo $mon_m 
echo $mon_a 
echo $mon_n 

$mon_m = 1 
$mon_a = 5 
$mon_n = 6 

我已經準備好去,需要一些幫助,讓這些值到PHP變量的SQL語句。

+1

你可以發佈你所談論的聯合查詢? –

+0

這是查詢條件: – PatC

+0

您應該編輯問題並向其中添加查詢,以便人們可以投票選擇要重新打開的問題。 –

回答

2

一旦你得到了MySQL查詢的結果,可以通過提取

extract($results); 

這將爲陣列中的每個關鍵變量運行它,所以一定要確保你的結果會返回一個關聯數組。有關更多詳細信息,請參閱http://www.php.net/manual/en/function.extract.php

1

爲什麼不使用數組?

$output_array = array(
    "mon_m" => 1, 
    "mon_a" => 2, 
    "mon_n" => 3 
); 

然後輸出他們像這樣

echo $output_array['mon_m']; 

而且,你的結果可以更加方便地在這種情況下,MySQL的。

$r = mysql_query("select * from table where columnB=" . $var); 
while($row = mysql_fetch_assoc($r)){ 
    $column = $row['columnA']; 
    $output_array[$column] = $row['columnB']; 
} 

然後你就可以做各種東西,有了它,通過輸出表循環,檢查值,鑰匙等與你提出什麼,我不認爲這將是很容易跟蹤創建的變量,或者與他們一起工作非常容易。

編輯::

這是一個更好的(?)方法來做到這一點。也許格外過於複雜的滿足您的需求,但與意見建議你使用PDO ...

function getObject($sql){ 
    $dbCon = new object(); 
     // building data source name 
     $dsn = 'mysql:host=' . DB_HOST . 
       ';dbname=' . DB_NAME . 
       ';connect_timeout=15'; 

     $dbCon->dbh = new PDO($dsn, DB_USER, DB_PASS); 

    try { 

     $stmt = $dbCon->dbh->prepare($sql); 

     $stmt->setFetchMode(PDO::FETCH_OBJ); 

     if($stmt->execute()){ 
       return (array) $stmt->fetchObject(); 
     } else { 
      return false; 
     } 
    } 

    catch(PDOException $e) { 
     $_messages[] = $e->getMessage(); 
    } 
} 

而且使用這樣的

$my_array = getObject($your_query); 

if(!empty($my_array['mon_m'])){ 
    echo $my_array['mon_m']; 
} 
+0

因爲您正在使用PHP的'mysql_ *'函數進行回答,現在已棄用,並且很快將從PHP版本中刪除。改用MySQLi或PDO。 – TheCarver

+0

增加了一個不同的答案,但對我來說,這似乎是非常複雜的,他問的確切問題。如果他闡述了他所需要的東西,無論如何,我們的假設似乎是正確的。 我會認爲你沒有回答,只是說明其他人的錯誤,並不比我們給出的答案更有建設性。 –

+1

不,我的建設性是試圖阻止新程序員在Google上找到這個問題,並且認爲這裏使用的方法是可以接受的。如果他們的服務器管理員決定儘快更新PHP,他們的網站將崩潰。我今天只回答了一個問題,那裏PHP已經更新,並且他們的項目由於'mysql_ *'函數而失敗(請查看我的答案)。對不起,你不能認爲這是建設性的,你不能公平。無論如何,我已經注意到你的編輯,所以我再次投票。 – TheCarver

相關問題