Ich versuche, die Reihenfolge der MySQL-Ergebnisse abhängig davon zu ändern, ob eine if
Bedingung in PHP
erfüllt ist.PHP MySQL-Reihenfolge ändern, wenn Bedingung erfüllt
Mein Code überprüft, ob Zeilen duplicates
sind, und ändert die Zeilenklasse, falls dies der Fall ist.
Was ich versuche zu erreichen ist, wenn es ein Duplikat gibt, dann ist die MySQL-Abfrage von Frequency
bestellt und wenn es keine Duplikate gibt, dann bestellen Sie es durch Name
.
Das ist, was ich habe:
function getFrequencies() {
$conn = getConnected("websiteData");
$frequencyQuery = "
SELECT
f.Name,
f.Frequency,
f.Country,
f.Programmed,
(SELECT count(*) FROM frequencies WHERE Frequency = f.Frequency) as count
FROM frequencies f;
";
$frequencyResult = mysqli_query($conn, $frequencyQuery);
while ($frequencyRow = mysqli_fetch_assoc($frequencyResult)) {
if($frequencyRow['count'] > 1) {
$frequencyQuery = "
SELECT
f.Name,
f.Frequency,
f.Country,
f.Programmed,
(SELECT count(*) FROM frequencies WHERE Frequency = f.Frequency) as count
FROM frequencies f
ORDER BY Frequency;
";
} else {
$frequencyQuery = "
SELECT
Name,
Frequency,
Country,
Programmed
FROM frequencies
ORDER BY Name;
";
}
}
$frequencyResult = mysqli_query($conn, $frequencyQuery);
while ($frequencyRow = mysqli_fetch_assoc($frequencyResult)){
if ($frequencyRow['count'] > 1) {
echo '<tr class="warning">' .
"<td>" . $frequencyRow['Name'] . "</td>" .
"<td>" . $frequencyRow['Frequency'] . "</td>" .
"<td>" . $frequencyRow['Country'] . "</td>" .
"<td>" . $frequencyRow['Programmed'] . "</td>" .
"</tr>" . PHP_EOL;
} else {
echo "<tr>" . PHP_EOL .
"<td>" . $frequencyRow['Name'] . "</td>" .
"<td>" . $frequencyRow['Frequency'] . "</td>" .
"<td>" . $frequencyRow['Country'] . "</td>" .
"<td>" . $frequencyRow['Programmed'] . "</td>" .
"</tr>" . PHP_EOL;
}
}
}
Jetzt weiß ich für eine Tatsache, dass meine Tabelle Duplikate enthält, aber derzeit gibt es keine markierten Zeilen und die Reihenfolge von Name
.
Bevor ich meinen Code auf die oben geändert stellte man fest, es war dies eine, die meine doppelte Zeilen hat hervorgehoben:
function getFrequencies() {
$conn = getConnected("websiteData");
// $frequencyQuery = "SELECT Name, Frequency, Country, Programmed, count(*) FROM frequencies GROUP BY Frequency ORDER BY Name";
$frequencyQuery = "
SELECT
f.Name,
f.Frequency,
f.Country,
f.Programmed,
(SELECT count(*) FROM frequencies WHERE Frequency = f.Frequency) as count
FROM frequencies f
ORDER BY Frequency;
";
$frequencyResult = mysqli_query($conn, $frequencyQuery);
while ($frequencyRow = mysqli_fetch_assoc($frequencyResult)) {
if ($frequencyRow['count'] > 1) {
echo '<tr class="danger">' . PHP_EOL .
"<td>" . $frequencyRow['Name'] . "</td>" . PHP_EOL .
"<td>" . $frequencyRow['Frequency'] . "</td>" . PHP_EOL .
"<td>" . $frequencyRow['Country'] . "</td>" . PHP_EOL .
"<td>" . $frequencyRow['Programmed'] . "</td>" . PHP_EOL .
"</tr>" . PHP_EOL;
} else {
echo "<tr>" . PHP_EOL .
"<td>" . $frequencyRow['Name'] . "</td>" . PHP_EOL .
"<td>" . $frequencyRow['Frequency'] . "</td>" . PHP_EOL .
"<td>" . $frequencyRow['Country'] . "</td>" . PHP_EOL .
"<td>" . $frequencyRow['Programmed'] . "</td>" . PHP_EOL .
"</tr>" . PHP_EOL;
}
}
}
Was kann ich tun, um zu erreichen, was ich tun möchte? Der Grund, warum ich die Reihenfolge ändern möchte, ist, dass, wenn keine Duplikate vorhanden sind, die Liste alphabetisch durchgeblättert wird, aber wenn es Duplikate gibt, werden die Duplikate durch die Reihenfolge Frequency
um eine Zeile nach der anderen verschoben, so dass find
und edit/delete
.
Es ist HTML, also brauchen Sie keine Zeilenumbrüche, und Sie brauchen nicht 'PHP_EOL' zu verwenden. '" \ n "' ist normalerweise genug. – tadman
erhalten Sie Resultset wie erwartet in SQL-Abfrage? –
Ich habe versucht, meinen Quellcode sauber zu halten, obwohl, wenn Sie sich meinen ersten und zweiten Code anschauen, ich viele von denen entferne, um es ein bisschen aufzuräumen, weil ich merkte, dass ich viel zu viele gesetzt habe. –