Improve SQL generation
authorJoey Schulze <joey@infodrom.org>
Wed, 3 Feb 2016 11:31:09 +0000 (11:31 +0000)
committerJoey Schulze <joey@infodrom.org>
Wed, 3 Feb 2016 11:31:09 +0000 (11:31 +0000)
src/linx/lookup.wml

index ccefa5d..690c56c 100644 (file)
@@ -15,9 +15,9 @@
 ?></h3>
 
 <?
-  $query = "SELECT url,subject,category FROM links ";
-  $query .= "WHERE ";
+  $query = "SELECT url,subject,category FROM links";
 
+  $condition = '';
   if (strlen ($keywords)) {
     $keys = explode (" ", $keywords);
     $keys_and = array();
     # Process all OR-keywords
     #
     if (count ($keys_or) > 1) {
-      $query .= "( ";
+      $condition .= "( ";
     }
     for ($i=0; $i < count ($keys_or); $i++) {
       if ($i > 0) {
-        $query .= "OR ";
+        $condition .= "OR ";
       }
-      $query .= sprintf ("( category ~* '%s' OR keywords ~* '%s' OR subject ~* '%s' OR url ~* '%s' ) ",
+      $condition .= sprintf ("( category ~* '%s' OR keywords ~* '%s' OR subject ~* '%s' OR url ~* '%s' ) ",
                        $keys_or[$i], $keys_or[$i], $keys_or[$i], $keys_or[$i]);
     }
     if (count ($keys_or) > 1) {
-      $query .= ") ";
+      $condition .= ") ";
     }
 
     # Process all AND-keywords
     #
     for ($i=0; $i < count ($keys_and); $i++) {
       if ($i > 0 || (count ($keys_or) > 0)) {
-        $query .= "AND ";
+        $condition .= "AND ";
       }
-      $query .= sprintf ("( category ~* '%s' OR keywords ~* '%s' OR subject ~* '%s' OR url ~* '%s' ) ",
+      $condition .= sprintf ("( category ~* '%s' OR keywords ~* '%s' OR subject ~* '%s' OR url ~* '%s' ) ",
                        $keys_and[$i], $keys_and[$i], $keys_and[$i], $keys_and[$i]);
     }
 
     #
     if ((count ($keys_or) > 0) || (count ($keys_and) > 0)) {
       for ($i=0; $i < count ($keys_not); $i++) {
-       $query .= sprintf ("AND NOT ( category ~* '%s' OR keywords ~* '%s' OR subject ~* '%s' OR url ~* '%s' ) ",
+       $condition .= sprintf ("AND NOT ( category ~* '%s' OR keywords ~* '%s' OR subject ~* '%s' OR url ~* '%s' ) ",
                          $keys_not[$i], $keys_not[$i], $keys_not[$i], $keys_not[$i]);
       }
     }
   }
 
-  if (strlen ($keywords) && strlen ($category)) { $query .= " AND "; }
+  if (strlen ($keywords) && strlen ($category)) { $condition .= " AND "; }
   if (strlen ($category)) {
     if (substr ($category, 0, 1) == "/") {
-      $query .= sprintf ("category = '%s'", $category);
+      $condition .= sprintf ("category = '%s'", $category);
     } else {
-      $query .= sprintf ("category ~* '%s'", $category);
+      $condition .= sprintf ("category ~* '%s'", $category);
     }
   }
 
-  $query .= "ORDER BY category,subject";
+  if (strlen($condition)) { $query .= " WHERE " . $condition; }
+  $query .= " ORDER BY category,subject";
 ?>
 
 <linx "$query">