smr/src/pages/search_sql.etlua.in

57 lines
1.2 KiB
Plaintext

SELECT
posts.id,
posts.post_title,
posts.isanon,
authors.name,
posts.post_time,
posts.views,
COUNT(comments.id)
FROM
posts,authors
LEFT JOIN comments ON comments.postid = posts.id
WHERE
authors.id = posts.authorid
AND posts.unlisted = 0
<% for field, values in pairs(result) do -%>
<% for _,value in pairs(values) do -%>
<% local pn,expr,value = unpack(value) -%>
<% local n = (pn == "+" and "" or "NOT") -%>
<% if field == "title" then -%>
AND <%= n %> posts.post_title LIKE ?
<% elseif field == "author" then -%>
AND <%= n %> authors.name LIKE ?
<% elseif field == "date" then -%>
AND <%= n %> posts.post_time <%- expr %> ?
<% elseif field == "hits" then -%>
AND posts.views <%- expr -%> ?
<% end -%>
<% end -%>
<% end -%>
GROUP BY
posts.id
<% for _,tag in pairs(result.tags) do -%>
INTERSECT
SELECT
posts.id,
posts.post_title,
posts.isanon,
authors.name,
posts.post_time,
posts.views,
COUNT(comments.id)
FROM
posts,authors,tags
LEFT JOIN comments ON comments.postid = posts.id
WHERE
posts.authorid = authors.id
AND tags.postid = posts.id
<% local n,v,t = unpack(tag) -%>
<% n = (n == "-" and "NOT" or "") -%>
AND <%= n %> tags.tag = ?
GROUP BY
posts.id
<% end -%>
ORDER BY
posts.post_time DESC
;