从一个表中选择多行

3

这是我的表结构:

id name value
1 questions 50
2 duration 120

现在,我想根据名称显示值。但我无法正确执行SQL语句。这是我的尝试:

$qry = "SELECT * FROM (
SELECT (SELECT value FROM pq_examsettings) as duration,
       (SELECT value FROM pq_examsettings) as questions
 ) ";
$result= mysql_query($qry);
$row = mysql_fetch_array($result);
$duration = $row['duration'];
$questions = $row['questions'];

请有人帮我解决如何编写查询,以便我的$duration和$questions变量显示为120和50。


如果这是一个新项目,请考虑使用mysqli扩展而不是mysql。 - Pier-Luc Gendreau
谢谢@Pier-LucGendreau。我注意到他们正在弃用mysql_函数。我将转换为mysqli扩展。 - mutiemule
3个回答

4

试试这个:

SELECT  MAX(CASE WHEN name = 'questions' THEN value END) questions,
        MAX(CASE WHEN name = 'duration' THEN value END) duration 
FROM    pq_examsettings

0

使用mysqli或pdo函数,mysql_*函数已被官方弃用:

$mysqli = new mysqli($dbserver, $dbmanager, $dbpass, $dbname);
if($mysqli->connect_errno) {
    echo "Error connecting to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

$query = $mysqli->query("SELECT * FROM pq_examsettings");
if($query->num_rows){
$new_row = array();
while($row = $query->fetch_assoc()){
    foreach($row as $key => $value){
        if($key == 'name'){
            $array_key = $value;
        }
        if($key == 'value'){
            $new_row[$array_key] = $value;
        }
    }
}
$duration = $new_row['duration'];
$questions = $new_row['questions'];
}

“SELECT *”查询在这里无法帮助 - 问题是如何将两个值作为两列放入单行中。 您的查询将以两行形式提供结果。 - Ed Gibbs
你可以使用 foreach 语句。 - Memolition
抱歉,现在它按照您的要求工作了。正如我所说,请尽量不要使用mysql_*函数。 - Memolition
1
@Memolition,现在可以工作了。谢谢,并感谢您提醒我使用mysqli。 - mutiemule

0

我对MySQL不够熟悉,不知道有没有简单的方法可以将行转置为列,并在一个select语句中返回结果——看起来JW给出了这样的答案。

另一个选择是只进行两个数据库调用:

$qry = "SELECT value FROM PQ_EXAMSETTINGS WHERE NAME = 'duration'";
$result= mysql_query($qry);
$row = mysql_fetch_array($result);
$duration = $row['value'];

$qry = "SELECT value FROM PQ_EXAMSETTINGS WHERE NAME = 'questions'";
$result= mysql_query($qry);
$row = mysql_fetch_array($result);
$questions = $row['value'];

1
这种方法也可以很好地工作,但在我看来,最好的方法是JW所做的方式。 - mutiemule

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接