我正在尝试在 Hasura 中创建一个函数来查询用户附近的帖子。我得到了那个工作,但我也想订购这些帖子。我收到一个 Postgres 错误,内容为:
“postgres-error : 列“b.Volume”必须出现在 GROUP BY 子句中或用于聚合函数中”
我是 Hasura 和 Postgres 的新手,我不确定您是否被允许做这样的事情。这是我的代码:
CREATE OR REPLACE FUNCTION public.search_posts_near_user(id uuid, distance_kms integer, volume integer)
RETURNS SETOF user_posts
LANGUAGE sql
STABLE
AS $function$
SELECT A.id, A.location,
(SELECT json_agg(row_to_json(B)) FROM "Posts" B
WHERE (
ST_Distance(
ST_Transform(B.location::Geometry, 3857),
ST_Transform(A.location::Geometry, 3857)
) /1000) < distance_kms AND B."Volume" < volume
ORDER BY B."Volume" Desc
) AS nearby_Posts
FROM users A where A.id = id
$function$
Run Code Online (Sandbox Code Playgroud) 这是将 SUM group by 添加到 COUNT DISTINCT 查询中的后续优化(尽管进行了一些优化和联接简化)。
我想知道是否可以优化以下需要完成的PostgreSQL 13.1查询130322.2ms。通常,如果只有一个JOIN LATERAL存在,它会在几毫秒内完成。
我最迷失的是,每个子查询JOIN LATERAL都有一个ON基于其自己的子查询分数的条件,我如何优化查询,可能减少子查询的数量JOIN LATERAL,但仍然得到相同的结果。
从我看来,当条件添加到代替OR中的某些 WHERE时,它似乎会变慢。看:JOIN LATERALAND
SELECT count(*)
FROM subscriptions q
JOIN LATERAL (
SELECT
SUM(ts.score) AS sum_score
FROM
quiz_answers qa
JOIN answers a ON a.id = qa.answer_id
JOIN tag_scores ts ON ts.answer_id = a.id
WHERE
qa.quiz_id = q.quiz_id
AND ts.tag_id = 21
) AS q62958 ON q62958.sum_score <= 1
JOIN LATERAL …Run Code Online (Sandbox Code Playgroud) 我正在学习PHP并尝试if .. else更好地理解语句,所以我正在创建一个小测验.但是,我遇到了一个问题,我似乎不知道问题是什么.我的问题是每当我输入输入区域的年龄$yes时,即使我输入了错误的年龄,它也会每次都给我变量.
这是我到目前为止的代码:
我的html文件:
<form action="questions.php" method="post">
<p>How old is Kenny?<input></input>
<input type="submit" name="age" value="Submit"/>
</p></form>
Run Code Online (Sandbox Code Playgroud)
我的php文件:
<?php
$age = 25;
$yes = "Awesome! Congrats!";
$no = "haha try again";
if ($age == 25){
echo "$yes";
}else{
echo "$no";
}
?>
Run Code Online (Sandbox Code Playgroud) 我不知道如何表达我的 SQL 问题,所以我会输入一个预期的场景。
| 电影ID | 标签ID |
|---|---|
| 1 | 1 |
| 1 | 3 |
| 1 | 5 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 3 |
| 3 | 5 |
| 3 | 7 |
我想选择至少与所有这些标签有标签关系的 movieId [1,3,5]。
所以预期的输出是1,3.
我有一个函数,使我需要使用SIMILAR TO带有变量的表达式的选择,我不知道如何做到这一点.这是代码:
DECLARE pckg_data cl_data;
DECLARE contacts contacts_reg%ROWTYPE;
DECLARE sim_name varchar;
BEGIN
SELECT client_reg._name,
client_reg.last_name,
client_reg.id_card,
client_reg.address
INTO pckg_data
FROM client_reg WHERE(client_reg._name = (cl_name ||' '|| cl_lastname));
RETURN NEXT pckg_data;
SELECT ('%'||cl_name || ' ' || cl_lastname ||'%') INTO sim_name;
FOR contacts IN SELECT contacts_reg.id
FROM contacts_reg, contactscli_asc, client_reg
WHERE(contacts_reg._name SIMILAR TO sim_name) LOOP
SELECT client_reg._name, client_reg.last_name, client_reg.id_card,
client_reg.address, client_reg.id
INTO pckg_data
FROM client_reg, contactscli_asc WHERE(contactscli_asc.contact = contacts.id
AND client_reg.id = contactscli_asc.client);
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud) 我在PHP中创建了一个包含大量HTML的表.创建之后,我将其作为JSON字符串回显如下:
echo json_encode($array['table']);
Run Code Online (Sandbox Code Playgroud)
然后我使用jQuery.parseJSON(returnString);并尝试将其附加到div.这只有在我返回一个字符串时才有效.当我发送HTML时它不起作用(在这种情况下根本没有返回任何内容).
谁能告诉我出了什么问题?\ / " '在将符号发送到jQuery之前,是否需要使用某些函数来解析符号?
编辑:
我$arr['table']看起来像这样:
$arr['table'] = "<tr class=\"{$id}\">lalalal</tr>"
Run Code Online (Sandbox Code Playgroud)
我的JSON看起来像这样:
\n\t\t\t\t\t</div>\n\t\t\t\t\tfcds\n\t\t\t\t\t</center>\
Run Code Online (Sandbox Code Playgroud) postgresql ×4
sql ×3
php ×2
hasura ×1
html ×1
if-statement ×1
javascript ×1
jquery ×1
json ×1
knn ×1
lateral-join ×1
plpgsql ×1
sql-order-by ×1