rewrite "please don't scream" sql

This commit is contained in:
221V
2025-02-03 19:47:39 +02:00
parent 140999794b
commit adaec555db
+93 -263
View File
@@ -3593,269 +3593,99 @@ class MYSQLi_DB implements IDbConnection {
// please don't scream... // please don't scream...
// with the current table structure, there really IS NOT another way // with the current table structure, there really IS NOT another way
// (except for stored procedures, which we can't rely on to be allowed on the server) // (except for stored procedures, which we can't rely on to be allowed on the server)
$result = mysqli_query($this->dblink," $result = mysqli_query($this->dblink, 'SELECT '.
SELECT 'CASE '.
IF( 'WHEN `f1t` IN ('.$fieldType.') THEN `f1` '.
f1t IN ($fieldType), 'WHEN `f2t` IN ('.$fieldType.') THEN `f2` '.
f1, 'WHEN `f3t` IN ('.$fieldType.') THEN `f3` '.
IF( 'WHEN `f4t` IN ('.$fieldType.') THEN `f4` '.
f2t IN ($fieldType), 'WHEN `f5t` IN ('.$fieldType.') THEN `f5` '.
f2, 'WHEN `f6t` IN ('.$fieldType.') THEN `f6` '.
IF( 'WHEN `f7t` IN ('.$fieldType.') THEN `f7` '.
f3t IN ($fieldType), 'WHEN `f8t` IN ('.$fieldType.') THEN `f8` '.
f3, 'WHEN `f9t` IN ('.$fieldType.') THEN `f9` '.
IF( 'WHEN `f10t` IN ('.$fieldType.') THEN `f10` '.
f4t IN ($fieldType), 'WHEN `f11t` IN ('.$fieldType.') THEN `f11` '.
f4, 'WHEN `f12t` IN ('.$fieldType.') THEN `f12` '.
IF( 'WHEN `f13t` IN ('.$fieldType.') THEN `f13` '.
f5t IN ($fieldType), 'WHEN `f14t` IN ('.$fieldType.') THEN `f14` '.
f5, 'WHEN `f15t` IN ('.$fieldType.') THEN `f15` '.
IF( 'WHEN `f16t` IN ('.$fieldType.') THEN `f16` '.
f6t IN ($fieldType), 'WHEN `f17t` IN ('.$fieldType.') THEN `f17` '.
f6, 'WHEN `f18t` IN ('.$fieldType.') THEN `f18` '.
IF( 'WHEN `f19t` IN ('.$fieldType.') THEN `f19` '.
f7t IN ($fieldType), 'WHEN `f20t` IN ('.$fieldType.') THEN `f20` '.
f7, 'WHEN `f21t` IN ('.$fieldType.') THEN `f21` '.
IF( 'WHEN `f22t` IN ('.$fieldType.') THEN `f22` '.
f8t IN ($fieldType), 'WHEN `f23t` IN ('.$fieldType.') THEN `f23` '.
f8, 'WHEN `f24t` IN ('.$fieldType.') THEN `f24` '.
IF( 'WHEN `f25t` IN ('.$fieldType.') THEN `f25` '.
f9t IN ($fieldType), 'WHEN `f26t` IN ('.$fieldType.') THEN `f26` '.
f9, 'WHEN `f27t` IN ('.$fieldType.') THEN `f27` '.
IF( 'WHEN `f28t` IN ('.$fieldType.') THEN `f28` '.
f10t IN ($fieldType), 'WHEN `f29t` IN ('.$fieldType.') THEN `f29` '.
f10, 'WHEN `f30t` IN ('.$fieldType.') THEN `f30` '.
IF( 'WHEN `f31t` IN ('.$fieldType.') THEN `f31` '.
f11t IN ($fieldType), 'WHEN `f32t` IN ('.$fieldType.') THEN `f32` '.
f11, 'WHEN `f33t` IN ('.$fieldType.') THEN `f33` '.
IF( 'WHEN `f34t` IN ('.$fieldType.') THEN `f34` '.
f12t IN ($fieldType), 'WHEN `f35t` IN ('.$fieldType.') THEN `f35` '.
f12, 'WHEN `f36t` IN ('.$fieldType.') THEN `f36` '.
IF( 'WHEN `f37t` IN ('.$fieldType.') THEN `f37` '.
f13t IN ($fieldType), 'WHEN `f38t` IN ('.$fieldType.') THEN `f38` '.
f13, 'WHEN `f39t` IN ('.$fieldType.') THEN `f39` '.
IF( 'WHEN `f40t` IN ('.$fieldType.') THEN `f40` '.
f14t IN ($fieldType), 'WHEN `f99t` IN ('.$fieldType.') THEN `f99` '.
f14, 'ELSE 0 '.
IF( 'END AS level '.
f15t IN ($fieldType), 'FROM `'.TB_PREFIX.'fdata` '.
f15, 'WHERE '.
IF( '`vref` = '.$vid.' '.
f16t IN ($fieldType), 'AND ('.
f16, '`f1t` IN ('.$fieldType.') OR '.
IF( '`f2t` IN ('.$fieldType.') OR '.
f17t IN ($fieldType), '`f3t` IN ('.$fieldType.') OR '.
f17, '`f4t` IN ('.$fieldType.') OR '.
IF( '`f5t` IN ('.$fieldType.') OR '.
f18t IN ($fieldType), '`f6t` IN ('.$fieldType.') OR '.
f18, '`f7t` IN ('.$fieldType.') OR '.
IF( '`f8t` IN ('.$fieldType.') OR '.
f19t IN ($fieldType), '`f9t` IN ('.$fieldType.') OR '.
f19, '`f10t` IN ('.$fieldType.') OR '.
IF( '`f11t` IN ('.$fieldType.') OR '.
f20t IN ($fieldType), '`f12t` IN ('.$fieldType.') OR '.
f20, '`f13t` IN ('.$fieldType.') OR '.
IF( '`f14t` IN ('.$fieldType.') OR '.
f20t IN ($fieldType), '`f15t` IN ('.$fieldType.') OR '.
f20, '`f16t` IN ('.$fieldType.') OR '.
IF( '`f17t` IN ('.$fieldType.') OR '.
f21t IN ($fieldType), '`f18t` IN ('.$fieldType.') OR '.
f21, '`f19t` IN ('.$fieldType.') OR '.
IF( '`f20t` IN ('.$fieldType.') OR '.
f22t IN ($fieldType), '`f20t` IN ('.$fieldType.') OR '.
f22, '`f21t` IN ('.$fieldType.') OR '.
IF( '`f22t` IN ('.$fieldType.') OR '.
f23t IN ($fieldType), '`f23t` IN ('.$fieldType.') OR '.
f23, '`f24t` IN ('.$fieldType.') OR '.
IF( '`f25t` IN ('.$fieldType.') OR '.
f24t IN ($fieldType), '`f26t` IN ('.$fieldType.') OR '.
f24, '`f27t` IN ('.$fieldType.') OR '.
IF( '`f28t` IN ('.$fieldType.') OR '.
f25t IN ($fieldType), '`f29t` IN ('.$fieldType.') OR '.
f25, '`f30t` IN ('.$fieldType.') OR '.
IF( '`f30t` IN ('.$fieldType.') OR '.
f26t IN ($fieldType), '`f31t` IN ('.$fieldType.') OR '.
f26, '`f32t` IN ('.$fieldType.') OR '.
IF( '`f33t` IN ('.$fieldType.') OR '.
f27t IN ($fieldType), '`f34t` IN ('.$fieldType.') OR '.
f27, '`f35t` IN ('.$fieldType.') OR '.
IF( '`f36t` IN ('.$fieldType.') OR '.
f28t IN ($fieldType), '`f37t` IN ('.$fieldType.') OR '.
f28, '`f38t` IN ('.$fieldType.') OR '.
IF( '`f39t` IN ('.$fieldType.') OR '.
f29t IN ($fieldType), '`f40t` IN ('.$fieldType.') OR '.
f29, '`f99t` IN ('.$fieldType.')) '.
IF( 'LIMIT 1');
f30t IN ($fieldType),
f30,
IF(
f31t IN ($fieldType),
f31,
IF(
f32t IN ($fieldType),
f32,
IF(
f33t IN ($fieldType),
f33,
IF(
f34t IN ($fieldType),
f34,
IF(
f35t IN ($fieldType),
f35,
IF(
f36t IN ($fieldType),
f36,
IF(
f37t IN ($fieldType),
f37,
IF(
f38t IN ($fieldType),
f38,
IF(
f39t IN ($fieldType),
f39,
IF(
f40t IN ($fieldType),
f40,
IF(
f99t IN ($fieldType),
f99,
0
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
) as level
FROM
".TB_PREFIX."fdata
WHERE
vref = $vid
AND
(f1t IN ($fieldType)
OR
f2t IN ($fieldType)
OR
f3t IN ($fieldType)
OR
f4t IN ($fieldType)
OR
f5t IN ($fieldType)
OR
f6t IN ($fieldType)
OR
f7t IN ($fieldType)
OR
f8t IN ($fieldType)
OR
f9t IN ($fieldType)
OR
f10t IN ($fieldType)
OR
f11t IN ($fieldType)
OR
f12t IN ($fieldType)
OR
f13t IN ($fieldType)
OR
f14t IN ($fieldType)
OR
f15t IN ($fieldType)
OR
f16t IN ($fieldType)
OR
f17t IN ($fieldType)
OR
f18t IN ($fieldType)
OR
f19t IN ($fieldType)
OR
f20t IN ($fieldType)
OR
f20t IN ($fieldType)
OR
f21t IN ($fieldType)
OR
f22t IN ($fieldType)
OR
f23t IN ($fieldType)
OR
f24t IN ($fieldType)
OR
f25t IN ($fieldType)
OR
f26t IN ($fieldType)
OR
f27t IN ($fieldType)
OR
f28t IN ($fieldType)
OR
f29t IN ($fieldType)
OR
f30t IN ($fieldType)
OR
f30t IN ($fieldType)
OR
f31t IN ($fieldType)
OR
f32t IN ($fieldType)
OR
f33t IN ($fieldType)
OR
f34t IN ($fieldType)
OR
f35t IN ($fieldType)
OR
f36t IN ($fieldType)
OR
f37t IN ($fieldType)
OR
f38t IN ($fieldType)
OR
f39t IN ($fieldType)
OR
f40t IN ($fieldType)
OR
f99t IN ($fieldType))
LIMIT 1
");
$row = mysqli_fetch_array($result, MYSQLI_ASSOC); $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
self::$fieldLevelsInVillageSearchCache[$vid.$fieldType] = $row['level']; self::$fieldLevelsInVillageSearchCache[$vid.$fieldType] = $row['level'];