2013-12-17 73 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

相关问题