2016-08-11 22 views
3

私は、自分自身のSQLテーブルを持つウェブページmon-sunを使って、イベントウェブサイトにデータベースを追加しています。各ページは任意の数のイベントを持つことができます。テーブルには6つの列(ID、名前、クラブ、場所、ホスト、説明)があります。現在、私は面倒な方法でデータを呼び出しています。データを呼び出すのがもう少し自動化されるように、私は自分のコードに追加を探しています。これまでの私のコード。フェッチされたSQLデータの反復処理

<?php 
 
    $dbhost = 'localhost';  
 
    $dbname = 'events'; 
 
    $dbuser = 'max'; 
 
    $dbpass = ''; 
 
    $appname = "Dundaah"; 
 

 
    $connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
 
    if ($connection->connect_error) die($connection->connect_error); 
 

 
    function queryMysql($query) 
 
    { 
 
    global $connection; 
 
    $result = $connection->query($query); 
 
    if (!$result) die($connection->error); 
 
    return $result; 
 
    } 
 
    $row = queryMysql("SELECT * FROM monday WHERE ID=1"); 
 
    $one = $row->fetch_array(MYSQLI_ASSOC); 
 
    $row2 = queryMysql("SELECT * FROM monday WHERE ID=2"); 
 
    $two = $row2->fetch_array(MYSQLI_ASSOC); 
 

 
?>

その後、私は使用最初のイベントのために呼び出します。私は、同じメソッドを使用しますが、私は代わりの新しい配列フェッチを毎回宣言をループへの道を探しています2つ目のイベントのために

<?php echo ucwords(strtolower($one['name']));?> 
 
<?php echo ucwords(strtolower($one['club']));?> 
 
<?php echo ucwords(strtolower($one['location']));?> 
 
<?php echo ucwords(strtolower($one['host']));?> 
 
<?php echo ucwords(strtolower($one['description']));?>

。ありがとうございました。

+0

まず、あなたが日ごとにデータベーステーブルを持っていない、あなたは '一日' という列を持つ単一のテーブルを持っていると思います、その価値はその日になります。次に、その日に月曜日のすべての行についてその表を照会します。 – SheppardDigital

+0

本当に、その追加のおかげで –

+0

しかし、1日に多くのイベントがある場合は、テーブルとして持つ方が簡単です –

答えて

0

$query = "SELECT * FROM events WHERE day='mon'"; 
 

 
$result = $conn->query($query); 
 
if (!$result) die($conn->error); 
 

 
$rows = $result->num_rows; 
 
$j = 0; 
 

 
$name_array=''; 
 
$club_array=''; 
 
$location_array=''; 
 
$host_array=''; 
 
$description_array=''; 
 

 
while ($j < $rows) 
 
{ 
 
$result->data_seek($j); 
 
$row = $result->fetch_array(MYSQLI_ASSOC); 
 

 
$event_name = $row['name']; 
 
$event_club = $row['club']; 
 
$event_location = $row['location']; 
 
$event_host = $row['host']; 
 
$event_description = $row['description']; 
 

 
$name_array[]=$event_name; 
 
$club_array[]=$event_club; 
 
$location_array[]=$event_location; 
 
$host_array[]=$event_host; 
 
$description_array[]=$event_description; 
 

 
++$j; 
 
}

echo $name_array[0]; 
 
echo $club_array[0]; 
 
echo $location_array[0]; 
 
echo $host_array[0]; 
 
echo $description_array[0];

2

これらの行に何かが役立つ可能性があります。

まず、曜日を含む配列を作成してから、foreachで配列をループし、毎日データベースのクエリを実行します。この例では、Dayの名前をキーとして(テストされていませんが、うまくいけば助けになります)、1日の結果を1つの配列に格納しています。

$dbhost = 'localhost';  
    $dbname = 'events'; 
    $dbuser = 'max'; 
    $dbpass = ''; 
    $appname = "Dundaah"; 

    $connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
    if ($connection->connect_error) die($connection->connect_error); 

$daysOfTheWeek = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; 

$resultsFromDB = []; 

foreach ($daysOfTheWeek as $day) { 
    $query = "SELECT * FROM events WHERE day = '$day'"; 
    $result = $connection->query($query); 
    $resultsFromDB[$day] = $result->fetch_all(MYSQLI_ASSOC); 
} 

// Display the results in a page 
echo "<h1>Events</h1>"; 

foreach ($daysOfTheWeek as $day) { 
    echo "<h2>$day</h2>"; 

    foreach ($resultsFromDB[$day] as $event) { 
    echo $event['name']; 
    } 
} 
+0

fetch_all()を使用するようにコードを更新しました。申し訳ありませんが、ORMを使用していないので、しばらくお待ちください。 – SheppardDigital

1

IN sqlステートメントは、いくつかの異なるIDを持つ行を取得できます。あなたはid=1(少なくともID)で行として最初の行を取得したい場合は、それmysqlの(だけでなく、他のDB)せずに、任意の順序を保証するものではありません必要な

$row = queryMysql("SELECT * FROM monday WHERE ID IN (1, 2) ORDER BY ID ASC"); 
    $one = $row->fetch_assoc(); // same as fetch_array(MYSQLI_ASSOC) 
    $two = $row2->fetch_assoc(); 

ORDER BY ID ASC

idが1000より小さいすべての行が必要な場合は、「less or equeal」比較を使用してすべての行を配列に保存できます。

$result = queryMysql("SELECT * FROM monday WHERE ID<=1000 ORDER BY ID ASC"); 
    $all_rows = $result->fetch_all(MYSQLI_ASSOC); 

    // then 
    //$one = $all_rows[0]; 
    //$two = $all_rows[1]; 

また、すべての結果をすぐに具体化する必要はありません。 Mysqli_resultはトラバース可能なオブジェクトです。 foreach($result as $row)と書くことができ、いつでもすべての行を取得できます。 foreachの間、すべてのrawはassoc配列としてフェッチされます。