Ist es möglich, mehr als einen CASE-MySQL-Left-Join durchzuführen?
Posted: 06 Jan 2025, 19:43
Ich versuche, mehr als drei Tabellen in meiner Datenbank abzufragen, um am Ende ein JSON-Ergebnis zu erhalten. Bisher kann ich ein CASE hinzufügen, um ein resultierendes Feld hinzuzufügen, und es funktioniert gut, aber ich würde gerne ein weiteres hinzufügen. Der folgende Code funktioniert, jedoch nur für das Feld „isLiked“. Ich möchte ein „hasViewed“ aus einer anderen Tabelle namens „viewed“ hinzufügen, die dieselbe Struktur wie „viewed“ hat
Ich habe es mit begrenztem Erfolg versucht.
Ich habe das Feld „hasViewed“ hinzugefügt und füge es hinzu, aber es ist das gleiche Ergebnis wie bei „isLiked“: -
Ich habe versucht, einen neuen LEFT JOIN hinzuzufügen:-
Also habe ich versucht: -
Ich erhalte diesen Fehler:-
Schwerwiegender Fehler: Nicht erfasste mysqli_sql_Exception: Sie haben einen Fehler in Ihrem
SQL-Syntax; Überprüfen Sie im Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von „to_user IS NOT NULL THEN
'true' ELSE 'false' END AS hasViewed ...' in Zeile 19 inC:\Users\julia\OneDrive\Desktop\XAMPP\htdocs\info2.php:46 Stack Trace:
#0 C:\Users\julia\OneDrive\Desktop\XAMPP\htdocs\info2.php(46): mysqli_query(Object(mysqli), '\r\nSELECT \r\n ...') #1 {main} thrownin C:\Users\julia\OneDrive\Desktop\XAMPP\htdocs\info2.php in Zeile 46
Ist das möglich oder muss ich einen anderen Ansatz ausprobieren, der im Grunde alles ist, was ich frage.
Code: Select all
$logged_user = mysqli_real_escape_string($conn, $_GET["logged_user"]);
$sql = "
SELECT
u.*,
(
3959 * acos(
cos(radians(52.41357)) *
cos(radians(u.lat)) *
cos(radians(u.lng) - radians(-1.51314816)) +
sin(radians(52.41357)) *
sin(radians(u.lat))
)
) AS distance,
CASE
WHEN l.to_user IS NOT NULL THEN 'true'
ELSE 'false'
END AS isLiked
FROM clients u
LEFT JOIN likes l
ON u.userID = l.to_user
AND l.from_user = '$logged_user'
HAVING distance < 10
ORDER BY distance
LIMIT 99";
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));
$userOnlineStatus = array();
while ($row = mysqli_fetch_assoc($result)) {
$userOnlineStatus[] = $row;
}
echo json_encode($userOnlineStatus);
Ich habe das Feld „hasViewed“ hinzugefügt und füge es hinzu, aber es ist das gleiche Ergebnis wie bei „isLiked“: -
Code: Select all
CASE
WHEN l.to_user IS NOT NULL THEN 'true'
ELSE 'false'
END AS hasViewed
Code: Select all
LEFT JOIN viewed l
ON u.userID = l.to_user
AND l.from_user = '$logged_user'
Code: Select all
CASE
WHEN l.to_user IS NOT NULL THEN 'true'
ELSE 'false'
END AS isLiked,
CASE
WHEN 2.to_user IS NOT NULL THEN 'true'
ELSE 'false'
END AS hasViewed
FROM clients u
LEFT JOIN likes l
ON u.userID = l.to_user
AND l.from_user = '$logged_user',
LEFT JOIN viewed 2
ON u.userID = 2.to_user
AND 2.from_user = '$logged_user'
Schwerwiegender Fehler: Nicht erfasste mysqli_sql_Exception: Sie haben einen Fehler in Ihrem
SQL-Syntax; Überprüfen Sie im Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von „to_user IS NOT NULL THEN
'true' ELSE 'false' END AS hasViewed ...' in Zeile 19 inC:\Users\julia\OneDrive\Desktop\XAMPP\htdocs\info2.php:46 Stack Trace:
#0 C:\Users\julia\OneDrive\Desktop\XAMPP\htdocs\info2.php(46): mysqli_query(Object(mysqli), '\r\nSELECT \r\n ...') #1 {main} thrownin C:\Users\julia\OneDrive\Desktop\XAMPP\htdocs\info2.php in Zeile 46
Ist das möglich oder muss ich einen anderen Ansatz ausprobieren, der im Grunde alles ist, was ich frage.