html_url,issue_url,id,node_id,user,user_label,created_at,updated_at,author_association,body,reactions,issue,issue_label,performed_via_github_app https://github.com/simonw/datasette/issues/356#issuecomment-495931140,https://api.github.com/repos/simonw/datasette/issues/356,495931140,MDEyOklzc3VlQ29tbWVudDQ5NTkzMTE0MA==,9599,simonw,2019-05-25T16:30:59Z,2019-05-25T16:30:59Z,OWNER,"I went with a much more simple URL scheme: `?_facet_m2m=destination_table` (it then figures out which the middle table is by looking at the foreign keys). This can be extended to be more complicated in the future if needed.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",346028655,Ability to display facet counts for many-to-many relationships, https://github.com/simonw/datasette/issues/356#issuecomment-495931078,https://api.github.com/repos/simonw/datasette/issues/356,495931078,MDEyOklzc3VlQ29tbWVudDQ5NTkzMTA3OA==,9599,simonw,2019-05-25T16:30:09Z,2019-05-25T16:30:09Z,OWNER,"Implemented in https://github.com/simonw/datasette/commit/d923d847545e829bf946bb9170bebfc7c3f9d993 Documentation here: https://datasette.readthedocs.io/en/latest/facets.html#facet-by-many-to-many Demo here: https://latest.datasette.io/fixtures/roadside_attractions","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",346028655,Ability to display facet counts for many-to-many relationships, https://github.com/simonw/datasette/issues/356#issuecomment-482620313,https://api.github.com/repos/simonw/datasette/issues/356,482620313,MDEyOklzc3VlQ29tbWVudDQ4MjYyMDMxMw==,9599,simonw,2019-04-12T15:35:44Z,2019-04-12T15:35:44Z,OWNER,"One question here is how these facets should be defined in the table page query string. #427 started exploring this. For any m2m facet we need to know: - what is the join table? - how is the join table related to our current table? - what is the table on the other side of the relationship? - how does that table relate to the join table? - how should that table be displayed (what's the label column)? The simplest form of m2m relationship can be automatically derived from just knowing the table. We can support that like so: ?_facet_m2m=tagged This could work automatically if the following constraints turn out to apply: - the tagged table has a foreign key back to our table, against our primary key - the tagged table has a single other foreign key to one other table - that other table has a single text column we can use as the label (or has a label column defined in metadata) If any of the above rules don't hold, I think the solution is to have explicit configuration. Per #427 this will likely be done using JSON in the query string. Something like this (would be one line but indented for readability): ``` ?_facet_m2m={ ""through"":""tagged"", ""through_fk_us"":""tree_id"", ""other"":""tags"", ""through_fk_other"":""tag_id"", ""other_label"": ""tag"" } ``` Probably also need a way of specifying the outbound column used on both us and other - if the m2m table isn't linking to the foreign keys. I don't yet like the names of the above keys.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",346028655,Ability to display facet counts for many-to-many relationships, https://github.com/simonw/datasette/issues/356#issuecomment-409088967,https://api.github.com/repos/simonw/datasette/issues/356,409088967,MDEyOklzc3VlQ29tbWVudDQwOTA4ODk2Nw==,9599,simonw,2018-07-31T04:14:44Z,2018-07-31T04:14:44Z,OWNER,"Here's the query I'm playing with for facet counts: https://datasette-m2m-work-in-progress.now.sh/russian-ads-e8e09e2?sql=select+target_id%2C+count%28*%29+as+n+from+ad_targets%0D%0Awhere%0D%0A++target_id+not+in+%28%22ec3ac%22%2C+%22e128e%22%29%0D%0A++and+ad_id+in+%28select+ad_id+from+ad_targets+where+target_id+%3D+%22ec3ac%22%29%0D%0A++and+ad_id+in+%28select+ad_id+from+ad_targets+where+target_id+%3D+%22e128e%22%29%0D%0Agroup+by+target_id+order+by+n+desc%3B ``` select target_id, count(*) as n from ad_targets where target_id not in (""ec3ac"", ""e128e"") and ad_id in (select ad_id from ad_targets where target_id = ""ec3ac"") and ad_id in (select ad_id from ad_targets where target_id = ""e128e"") group by target_id order by n desc; ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",346028655,Ability to display facet counts for many-to-many relationships,