2016-08-11 2 views
3

Ich füge meiner Ereigniswebseite eine Datenbank mit den Webseiten mon-sun hinzu, jede mit ihrer eigenen SQL-Tabelle. Jede Seite kann eine beliebige Anzahl von Ereignissen haben. Die Tabelle hat 6 Spalten (ID, Name, Club, Standort, Gastgeber, Beschreibung). Derzeit verwende ich eine ermüdende Methode, um die Daten aufzurufen. Ich suche nach einem Zusatz zu meinem Code, damit der Aufruf der Daten etwas automatisierter ist. Mein Code bisher.Durchgelaufene SQL-Daten durchlaufen

<?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); 
 

 
?>

Dann für das erste Ereignis nennen ich verwende.

<?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']));?>

Für den zweiten Fall verwende ich die gleiche Methode, aber ich bin für einen Weg zur Schleife der Suche durch, anstatt eine neue holen Array jedes Mal zu erklären. Vielen Dank.

+0

Erstens würden Sie nicht eine Datenbanktabelle für jeden Tag haben, können Sie mit einer Spalte eine einzige Tabelle 'Tag' bezeichnet haben würde, und der Wert davon wäre der Tag. Sie würden dann diese Tabelle für alle Zeilen mit dem Tag = Montag abfragen. – SheppardDigital

+0

Wahr, danke für diesen Zusatz –

+0

aber ein Tag kann viele Ereignisse haben, es wäre einfacher, es als Tabelle zu haben –

Antwort

0

Verstanden.

$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

Etwas in dieser Richtung kann helfen.

Zuerst erstellen Sie ein Array, das die Wochentage enthält, dann durchlaufen Sie das Array in einer Foreach und führen für jeden Tag eine Abfrage für die Datenbank durch. In diesem Beispiel speichere ich die Ergebnisse für jeden Tag in einem einzigen Array mit dem Tag-Namen als Schlüssel (ungetestet, aber hoffentlich hilft es).

$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

Ich habe den Code für die Verwendung von fetch_all() aktualisiert, leider ist es eine Weile her, dass ich kein ORM verwendet habe. – SheppardDigital

1

können Sie IN SQL-Anweisung verwenden, um Zeilen mit verschiedenen IDs zu erhalten.

$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 erforderlich, wenn Sie erste Zeile als Zeile mit id=1 (am wenigsten ID) erhalten möchten, ohne es (wie auch andere db) mysql keine Ordnung garantieren.

Wenn Sie (zum Beispiel) alle Zeilen mit einer ID kleiner als 1000 benötigen, können Sie den Vergleich "less or equeal" verwenden und alle Zeilen im Array speichern.

$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]; 

Auch müssen Sie nicht alle Ergebnisse sofort materialisieren. Mysqli_result ist ein traversierbares Objekt. Sie können foreach($result as $row) schreiben und alle Zeilen jederzeit abrufen. Während foreach werden alle Raws als assoziatives Array abgerufen.