以特定顺序显示数据库中的数据:php或mysql?

时间:2016-01-20 22:29:19

标签: php mysql arrays

我有一个电话号码表:

phone:
phoneID (PK)
peopleID (fK)
countrycode
areacode
phonenumber
extension
phonetype //EDIT!!! (sorry forgot this in first post)

每个人最多可以拥有4个电话号码:公司,传真,家庭,移动电话。

我有一个编辑表格。编辑表单从数据库中提取数据并填充表单。 此代码用于提取数据:

$stmt = $conn->prepare("SELECT * FROM phone WHERE peopleID=?");
if ( !$stmt ) {
    die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );
}
else if ( !$stmt->bind_param('i', $peopleID) ) {
    die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );
}
else if ( !$stmt->execute() ) { 
    die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) ); 
} else {
    $resultaddress = $stmt->get_result();

    while($row = $resultaddress->fetch_assoc()) {
        $phoneID_array[] = $row['phoneID'];  
        $phonetype_array[] = (isset ($row['phonetype']) ? $row['phonetype'] : "");
        $countrycode_array[] = (isset ($row['countrycode']) ? $row['countrycode'] : "");
        $areacode_array[] = (isset ($row['areacode']) ? $row['areacode'] : "");
        $phonenumber_array[] = (isset ($row['phonenumber']) ? $row['phonenumber'] : "");
        $extension_array[] = (isset ($row['extension']) ? $row['extension'] : "");
    }   
}

这将填充表格:

for ($i = 0; $i < 4; $i++) {
    echo 'Phone<input type="text" name="type[]" id="" value="' . (isset ($phonetype_array[$i]) ? $phonetype_array[$i] : "company") . '"/>';
    echo '<input type="text" name="countrycode[]" id="" size="3" maxlength="3" value="' . (isset ($countrycode_array[$i]) ? $countrycode_array[$i] : "") . '"/>';
    echo '<input type="text" name="countrycode[]" id="" value="' . (isset ($areacode_array[$i]) ? $areacode_array[$i] : "") . '"/>';
    echo '<input type="text" name="number[]" id="" value="' . (isset ($phonenumber_array[$i]) ? $phonenumber_array[$i] : "") . '"/>';
    echo '<input type="text" name="extension[]" id="" value="' . (isset ($extension_array[$i]) ? $extension_array[$i] : "") . '"/><br>';                

}

表格现在显示:

公司000 000 1234567

home 000 000 1234569

(没有空字段最终输入新数字)

问题:

我想以相同的顺序显示电话号码: 假设我在DB中只有公司和家庭号码,编辑表格应该看起来像

公司:000 000 1234567

传真:空白字段填写

主页:000 000 1234569

移动:空字段填写

可能可以使用关联数组,但我不知道如何:(

感谢您的帮助!

编辑:在阅读完所有的答案和评论后,我明白这是一个更好的设计,有一个专用的表格式,并在电话表中使用外键。认为这是一个完全不同的场景,我问了另一个问题mysql left join not return all left table row 再次感谢所有花时间帮助我的人。

2 个答案:

答案 0 :(得分:1)

您需要在电话桌中添加另一个字段:

'phonetype' ENUM('company','fax','home','mobile')

和查询:

SELECT phone.* FROM people 
    LEFT JOIN phone ON phone.peopleID=people.peopleID 
WHERE people.peopleID=? AND phone.phonetype='company'
UNION 
SELECT phone.* FROM people 
    LEFT JOIN phone ON phone.peopleID=people.peopleID 
WHERE people.peopleID=? AND phone.phonetype='fax'
UNION 
SELECT phone.* FROM people 
    LEFT JOIN phone ON phone.peopleID=people.peopleID 
WHERE people.peopleID=? AND phone.phonetype='home'
UNION 
SELECT phone.* FROM people 
    LEFT JOIN phone ON phone.peopleID=people.peopleID 
WHERE people.peopleID=? AND phone.phonetype='mobile'

现在你将得到4行,其中一些可能是空的

答案 1 :(得分:1)

我可以想到十几种改善这种方法的方法;最明显的是数据库中的单独电话号码表。但是,对于最简单的插入代码替换,您可以将其设置为按类型键入的单个数组:

/* Make an empty array with empty values for each phone type */
$emptyphone = array(
    "countrycode"=>"",
    "areacode"=>"",
    "phonenumber"=>"",
    "extension"=>"",
);
$phones = array(
    "company"=>$emptyphone + array("phonetype"=>"company"),
    "fax"=>$emptyphone + array("phonetype"=>"fax"),
    "home"=>$emptyphone + array("phonetype"=>"home"),
    "mobile"=>$emptyphone + array("phonetype"=>"mobile"),
);

/* Now fill in the values you do have */
while($row = $resultaddress->fetch_assoc()) {
    $phones[$row["phonetype"]] = $row;
}

/* Now you can loop through them with a simple foreach */
foreach($phones as $phone) {
    echo 'Phone<input type="text" name="type[]" id="" value="' . $phone["phonetype"] . '"/>';
    echo '<input type="text" name="countrycode[]" id="" size="3" maxlength="3" value="' . $phone["countrycode"] . '"/>';
    echo '<input type="text" name="countrycode[]" id="" value="' . $phone["areacode"] . '"/>';
    echo '<input type="text" name="number[]" id="" value="' . $phone["phonenumber"] . '"/>';
    echo '<input type="text" name="extension[]" id="" value="' . $phone["extension"] . '"/><br>';                
}