2015-05-20 30 views
0

我需要幫助,如何簡化(循環)if else語句並獲取mysql表列的名稱(PHP)

場景:Hotel,Checking Guests in。數據庫中的數據。

的MySQL:

CREATE TABLE IF NOT EXISTS `hotels` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `Name` varchar(50) NOT NULL, 
    `Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `Room01` int(11) NOT NULL, 
    `Room02` int(11) NOT NULL, 
    `Room03` int(11) NOT NULL, 
    `Room04` int(11) NOT NULL, 
    `Room05` int(11) NOT NULL, 
    `Room06` int(11) NOT NULL, 
    `Room07` int(11) NOT NULL, 
    `Room08` int(11) NOT NULL, 
    `Room09` int(11) NOT NULL, 
    `Room10` int(11) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

$結果= mysql_query( 「SELECT * FROM酒店WHERE名稱= '酒店1'」);

$ row = mysql_fetch_array($ result);

$ room01 = $ row ['room01'];

0 =空,1 =不空。

這裏是我的代碼:

<?php 
//example 
$room01=1; 
$room02=1; 
$room03=0; 
$room04=0; 
//example 

if ($room01 == 0) 
{ 
echo "Your room is room01."; 
} 
elseif ($room02 == 0) 
{ 
echo "Your room is room02."; 
} 
elseif ($room03 == 0) 
{ 
echo "Your room is room03."; 
} 
elseif ($room04 == 0) 
{ 
echo "Your room is room04."; 
} 
else 
{ 
echo "None!"; 
} 
?> 

結果:你的房間room03。

如果我有100個房間會怎麼樣? 如何簡化if語句並獲取房間名稱?

+0

這是你想使用的代碼,或只是一個例子來澄清你的問題? –

+0

你需要使用類似「你的房間是房間」+ $ roomNumber +「。」; –

+0

爲什麼不檢查SQL是否爲空? @RoddeyFrost'.'用於連接PHP。 – chris85

回答

-1

使用array_search

const EMPTY_ROOM = 0; 

$roomNumber = array_search(EMPTY_ROOM, $row); 
if(false === $roomNumber) { 
    echo 'None!'; 
    return; 
} 

echo 'Your room is ' . $roomNumber . '.' . PHP_EOL; 

更新

嗯,我用測試數據來生成輸入。隨着你的表結構這裏的更新代碼:

function readDatabase() { 
    $handle = mysql_connect('localhost', 'root'); 
    mysql_select_db('stackexchange'); 

    if(!$handle) { 
     exit(mysql_error($handle)); 
    } 

    $result = mysql_query("SELECT * FROM hotels WHERE Name = 'hotel1'", $handle); 

    return mysql_fetch_array($result, MYSQL_ASSOC); 
} 

const EMPTY_ROOM = 0; 
const OCCUPIED_ROOM = 1; 

$row = readDatabase(); 

//use `array_slice` to get rid of columns: `id`, `Name`, `Date`. We want to search only in remaining columns: Room01, Room02 .... RoomN. 
$roomNumber = array_search(EMPTY_ROOM, array_slice($row, 3)); 
if(false === $roomNumber) { 
    echo 'None!'; 
    return; 
} 

echo 'Your room is ' . $roomNumber . '.' . PHP_EOL; 
+0

我發佈了更新的解決方案。它現在對你有用嗎? – swordfish

+0

它的工作原理!我需要的只是添加密碼並修改數據庫名稱。很感謝。 :) – Frank

+0

樂意幫忙! :) – swordfish

0

這應該工作(內部小說明):

$row = mysql_fetch_array($result); 

$roomNumber = 1; 

//Get data from array 
foreach($row as $data){ 
    //if room returns 0 (empty) 
    if($data == 0){ 
     if($roomNumber < 10){ 
      echo "Your room is room0". $roomNumber; 
      break; 
     } else { 
      echo "Your room is room". $roomNumber; 
      break; 
     } 
    } else { 
     $roomNumber++; 
    } 
} 

這種方法的好處是,它並不重要,你有多少房間都有。你可以添加或刪除儘可能多的你喜歡的。它將循環遍歷所有這些代碼,而無需熟練掌握代碼。

編輯:

@Strawberrys評論後,我認識到,雖然我的答覆工作,這是不是你應該繼續的方式。數據庫規範化將是要走的路。例如:

CREATE TABLE `hotels` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `Name` VARCHAR(64) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; 

CREATE TABLE `rooms` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `Hotel_id` INT(11) NOT NULL, 
    `Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `Room_number` INT(5) NOT NULL, 
    `Occupied` INT(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; 

使用這種類型的數據庫設計,您可以輕鬆地添加和刪除酒店到您的系統。使用Hotel_id作爲參考,您現在可以輕鬆地將房間添加到您的酒店並將其移除,而無需使用瘋狂數量的表格列。

要使用它,只需查詢rooms中的Hotel_id以獲取所有房間的返回。此後,它只是一個檢查第一Room_number的無論身在何處Occupied返回0

+0

謝謝。我會嘗試。 – Frank

+0

不客氣。雖然我建議您在測試之前不要接受答案,並確認它是否有效。我很感謝你的讚賞,但如果它沒有幫助你,它會很難過。 – icecub

+0

謝謝,我得到了很多房間的消息,像一團糟,無法弄清楚。我剛剛添加了關於該問題的更多信息。 (mysql表) – Frank

0

使用array_filter找到從數據庫中產生的所有空房間,然後打印第一個房間的名稱,如果有的話。您可以在不假設數據庫中有100n房間數量的情況下編寫代碼。

const EMPTY_ROOM = 0; 
const OCCUPIED_ROOM = 1; 

$rows = mysql_fetch_array($result); 

$emptyRooms = array_filter($rows, function($room_value) { 
    return EMPTY_ROOM === $room_value; 
}); 


if(empty($emptyRooms) || !is_array($emptyRooms)) { 
    echo 'None!'; 
    return; 
} 

$rooms = array_keys($emptyRooms); 
echo 'Your room is ' . $rooms[0] . '.' . PHP_EOL; 

更新:這可能是因爲嚴格檢查失敗(EMPTY === $room_value)。當你從數據庫$room_value獲得數據時保存字符串數據。這裏的更新代碼:

function readDatabase() { 
    $handle = mysql_connect('localhost', 'root'); 
    mysql_select_db('stackexchange'); 

    if(!$handle) { 
     exit(mysql_error($handle)); 
    } 

    $result = mysql_query("SELECT * FROM hotels WHERE Name = 'hotel1'", $handle); 

    return mysql_fetch_array($result, MYSQL_ASSOC); 
} 

$row = readDatabase(); 

const EMPTY_ROOM = '0';//set to string value to compare against database value 

//use `array_slice` to get rid of columns: `id`, `Name`, `Date`. 
//We want to search only in remaining columns: Room01, Room02 .... RoomN. 
$row = array_slice($row, 3); 

$emptyRooms = array_filter($row, function($room_value) { 
    return EMPTY_ROOM === $room_value; 
}); 

if(empty($emptyRooms) || !is_array($emptyRooms)) { 
    echo 'None!'; 
    return; 
} 

$rooms = array_keys($emptyRooms); 
echo 'Your room is ' . $rooms[0] . '.' . PHP_EOL; 
+0

感謝張貼表結構。我使用'array_filter'發佈了更新的解決方案,但我會推薦使用'array_search'解決方案 - 發佈爲單獨的答案。 – swordfish

+0

這工作。非常感謝。 :) – Frank