supabase外键查询语句
官网查询语句大全https://supabase.com/docs/reference/javascript/is
“Querying Joins and Nested tables” 页面:
https://supabase.com/docs/guides/database/joins-and-nesting“JavaScript: Fetch data / Query referenced tables” 子节:
https://supabase.com/docs/reference/javascript/select(参考 “Query referenced tables” 示例)Using filters (JavaScript) – Supabase Docshttps://supabase.com/docs/reference/javascript/filter过滤语句
https://supabase.com/docs/reference/javascript/or
下面2段查询语句效果一样,!wp_postmeta_post_id_fkey似乎并不重要。因为supabase会自动寻找外键。但一切的前提是需要先去数据库创建外键
import { createClient } from "@/lib/supabase/client";const supabase = await createClient();const { data, error } = await supabase.from('wp_posts').select(`id,post_title,post_date,metassss:wp_postmeta(meta_key,meta_value)`).eq('post_status', 'publish').eq('wp_postmeta.meta_key', 'thumbnail') // 如果不写,则会查询出所有meta_key.order('post_date', { ascending: false }).limit(10);
const { data, error } = await supabase.from('wp_posts').select(`id,post_title,post_date,metassss:wp_postmeta!wp_postmeta_post_id_fkey(meta_key,meta_value)`).eq('post_status', 'publish') // 主表筛选.order('post_date', { ascending: false }).limit(10);

2次外键嵌套查询
const { data, error } = await supabase.from('wp_posts').select(`id,post_title,post_date,metassss:wp_postmeta!wp_postmeta_post_id_fkey(meta_value,termgggg:testuid!testuid_wai_fkey(book))`).eq('post_type', 'post').order('post_date', { ascending: false }).limit(10);

关键语法规则
- 关联格式:
关联别名:关联表名!外键名(字段列表)(!是关联符) - 外键名:需在 Supabase 控制台确认表间外键(如
wp_posts_id_fkey) - 筛选优先级:主表筛选用
.eq()直接跟在from后,关联表筛选需指定别名(如metas.meta_key)
在 Supabase 中(如果你把 WordPress 数据迁移进 PostgreSQL),
你同样可以建立如下外键
ALTER TABLE hghghg.wp_term_taxonomy
ADD CONSTRAINT fk_term_tax_term
FOREIGN KEY (term_id) REFERENCES hghghg.wp_terms(term_id);ALTER TABLE hghghg.wp_term_relationships
ADD CONSTRAINT fk_term_rel_tax
FOREIGN KEY (term_taxonomy_id) REFERENCES hghghg.wp_term_taxonomy(term_taxonomy_id);ALTER TABLE hghghg.wp_term_relationships
ADD CONSTRAINT fk_term_rel_post
FOREIGN KEY (object_id) REFERENCES wp_posts(id);
这样,你就可以使用 Supabase 的嵌套查询语法:
const { data } = await supabase.from('wp_posts').select(`ID,post_title,categories:wp_term_relationships(wp_term_taxonomy(wp_terms(name)))`).eq('post_status', 'publish');
下面的语句删除一个eq,并添加taxonomy字段,可使前端看起来更清晰
const { data, error } = await supabase.from('wp_posts').select(`id,post_title,categories:wp_term_relationships(wp_term_taxonomy(taxonomy,wp_terms(name)))`).eq('post_status', 'publish')//.eq('wp_term_relationships.wp_term_taxonomy.taxonomy', 'post_tag').limit(3);

查询所有分类及文章数
const { data, error } = await supabase.from('wp_term_taxonomy').select(`term_taxonomy_id,taxonomy,description,count,term:wp_terms(term_id, name, slug)`).eq('taxonomy', 'category').order('count', { ascending: true });

