ben_sandi

Badges

100 Contributions1,000 Contributions10 Posts

Contributions

Posts

1 Day

62

7 Days

76

4 Weeks

113

All Time

6752

Current Streak

1

Longest Streak

13

Contributions Map

Contributions by Country

Country Contributions Between Climbers Crags Summits Climbs Ascents
1 USA 1526 20th November 2025 – 4th November 2026 48 20 0 88 98
2 Australia 767 27th September 2025 – 29th June 2026 6 38 0 61 33
3 United Kingdom 625 19th November 2025 – 4th November 2026 34 14 0 24 49
4 Switzerland 308 24th January 2026 – 4th November 2026 6 3 0 14 38
5 France 300 6th January 2026 – 4th November 2026 15 3 0 12 34
6 Austria 210 12th November 2025 – 22nd June 2026 5 2 0 8 22
7 Italy 163 18th November 2025 – 2nd November 2026 9 3 0 12 12
8 Pakistan 118 11th April 2026 – 26th April 2026 0 0 0 1 7
9 Spain 105 20th February 2026 – 16th May 2026 5 0 0 10 11
10 Germany 103 3rd February 2026 – 26th June 2026 7 0 0 7 10

Recent Contributions

Date Time User Type Name Attribute
2821 2nd May 2026 13:42:19 UTC ben_sandi climber Freda Du Faur country_flag
Before
None
After
🇦🇺
2822 2nd May 2026 13:42:19 UTC ben_sandi climber Freda Du Faur country_membership
Before
None
After
australian
2823 2nd May 2026 13:42:19 UTC ben_sandi climber Freda Du Faur country_name
Before
None
After
Australia
2824 2nd May 2026 13:42:19 UTC ben_sandi climber Freda Du Faur country_id
Before
None
After
8
2825 2nd May 2026 13:42:19 UTC ben_sandi climber Freda Du Faur nationality
Before
None
After
AU
2826 2nd May 2026 13:42:19 UTC ben_sandi climber Freda Du Faur gender
Before
None
After
true
2827 2nd May 2026 13:42:19 UTC ben_sandi climber Freda Du Faur climber_name
Before
None
After
Freda Du Faur
2828 2nd May 2026 13:30:02 UTC ben_sandi media https://www.youtube.com/watch?v=LcGQiHsLbqk missing_right_to_reproduce
Before
None
After
false
2829 2nd May 2026 13:30:02 UTC ben_sandi media https://www.youtube.com/watch?v=LcGQiHsLbqk url
Before
None
After
https://www.youtube.com/watch?v=LcGQiHsLbqk
2830 2nd May 2026 13:30:01 UTC ben_sandi climber Campbell Harrison notes_pretty
Before
<p>Campbell is an Australian competition climber, who competed in the 2024 Paris Olympics.</p> <h3>References</h3> <p>[1] Boulder by Boulder | Campbell Harrison Documentary: <a href="https://youtu.be/2NStCdy1L0I" rel="noopener noreferrer">https://youtu.be/2NStCdy1L0I</a></p>
After
<p>Campbell is an Australian competition climber, who competed in the 2024 Paris Olympics.</p> <h3>References</h3> <p>[1] Boulder by Boulder | Campbell Harrison Documentary: <a href="https://youtu.be/2NStCdy1L0I" rel="noopener noreferrer">https://youtu.be/2NStCdy1L0I</a></p> <p>[2] The Crux Episode 3: <a href="https://www.youtube.com/watch?v=LcGQiHsLbqk" rel="noopener noreferrer">https://www.youtube.com/watch?v=LcGQiHsLbqk</a></p>
2831 2nd May 2026 13:30:01 UTC ben_sandi climber Campbell Harrison notes
Before
Campbell is an Australian competition climber, who competed in the 2024 Paris Olympics. ### References [1] Boulder by Boulder | Campbell Harrison Documentary: [https://youtu.be/2NStCdy1L0I](https://youtu.be/2NStCdy1L0I)
After
Campbell is an Australian competition climber, who competed in the 2024 Paris Olympics. ### References [1] Boulder by Boulder | Campbell Harrison Documentary: [https://youtu.be/2NStCdy1L0I](https://youtu.be/2NStCdy1L0I) [2] The Crux Episode 3: [https://www.youtube.com/watch?v=LcGQiHsLbqk](https://www.youtube.com/watch?v=LcGQiHsLbqk)
Diff
--- before

+++ after

@@ -2,4 +2,7 @@


### References

-[1] Boulder by Boulder | Campbell Harrison Documentary: [https://youtu.be/2NStCdy1L0I](https://youtu.be/2NStCdy1L0I)
+[1] Boulder by Boulder | Campbell Harrison Documentary: [https://youtu.be/2NStCdy1L0I](https://youtu.be/2NStCdy1L0I)
+
+[2]
+The Crux Episode 3: [https://www.youtube.com/watch?v=LcGQiHsLbqk](https://www.youtube.com/watch?v=LcGQiHsLbqk)
2832 2nd May 2026 13:26:38 UTC ben_sandi climber Campbell Harrison age
Before
None
After
28
2833 2nd May 2026 13:26:38 UTC ben_sandi climber Campbell Harrison date_of_birth_pretty
Before
After
28th Jun 1997
2834 2nd May 2026 13:26:38 UTC ben_sandi climber Campbell Harrison date_of_birth_end
Before
None
After
1997-06-28
2835 2nd May 2026 13:26:38 UTC ben_sandi climber Campbell Harrison date_of_birth_start
Before
None
After
1997-06-28
2836 2nd May 2026 13:26:38 UTC ben_sandi climber Campbell Harrison ifsc_url
Before
None
After
https://ifsc.results.info/athlete/2493
2837 2nd May 2026 13:26:38 UTC ben_sandi climber Campbell Harrison instagram_url
Before
None
After
https://www.instagram.com/campbell_harrison547/?hl=en
2838 2nd May 2026 13:25:35 UTC ben_sandi climber Campbell Harrison notes_pretty
Before
<p>Campbell is an Australian competition climber, who competed in the 2024 Paris Olympics.</p> <h3>References</h3> <p>[1] <a href="https://youtu.be/2NStCdy1L0I" rel="noopener noreferrer">https://youtu.be/2NStCdy1L0I</a></p>
After
<p>Campbell is an Australian competition climber, who competed in the 2024 Paris Olympics.</p> <h3>References</h3> <p>[1] Boulder by Boulder | Campbell Harrison Documentary: <a href="https://youtu.be/2NStCdy1L0I" rel="noopener noreferrer">https://youtu.be/2NStCdy1L0I</a></p>
2839 2nd May 2026 13:25:35 UTC ben_sandi climber Campbell Harrison notes
Before
Campbell is an Australian competition climber, who competed in the 2024 Paris Olympics. ### References [1] [https://youtu.be/2NStCdy1L0I](https://youtu.be/2NStCdy1L0I)
After
Campbell is an Australian competition climber, who competed in the 2024 Paris Olympics. ### References [1] Boulder by Boulder | Campbell Harrison Documentary: [https://youtu.be/2NStCdy1L0I](https://youtu.be/2NStCdy1L0I)
Diff
--- before

+++ after

@@ -2,4 +2,4 @@


### References

-[1] [https://youtu.be/2NStCdy1L0I](https://youtu.be/2NStCdy1L0I)
+[1] Boulder by Boulder | Campbell Harrison Documentary: [https://youtu.be/2NStCdy1L0I](https://youtu.be/2NStCdy1L0I)
2840 1st May 2026 23:00:16 UTC ben_sandi list Crags to Create list_definition
Before
with missing_crags as ( select substring(c.eight_a_nu_url from '^(.+)/sectors/') as eight_a_nu_crag_url ,split_part(c.eight_a_nu_url, '/', 7) as eight_a_nu_crag_slug ,initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) as eight_a_nu_crag_name ,count(*) as climbs_missing ,string_agg( '<a href="' || c.url || '">' || c.climb_name || '</a>', ', ' order by c.climb_name ) as climbs from climbs c where c.deleted_on is null and c.crag_id is null and c.eight_a_nu_url is not null and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%' group by substring(c.eight_a_nu_url from '^(.+)/sectors/') ,split_part(c.eight_a_nu_url, '/', 7) ) select '<a href="' || m.eight_a_nu_crag_url || '">' || m.eight_a_nu_crag_name || '</a>' as "8a.nu Crag" ,m.climbs_missing as "Climbs Missing" ,m.climbs as "Climbs" ,coalesce(site_crags.crag_exists, '') as "Crag Exists?" from missing_crags m left join lateral ( select string_agg( '<a href="' || c2.url || '">' || c2.crag_name || '</a>', ', ' order by c2.crag_name ) as crag_exists from crags c2 where c2.deleted_on is null and ( ( length(m.eight_a_nu_crag_name) <= 4 and lower(regexp_replace(c2.crag_name, '[^a-z0-9]+', '', 'g')) = lower(regexp_replace(m.eight_a_nu_crag_name, '[^a-z0-9]+', '', 'g')) ) or ( length(m.eight_a_nu_crag_name) between 5 and 8 and ( lower(c2.crag_name) ~ ('(^|[^a-z0-9])' || lower(regexp_replace(m.eight_a_nu_crag_name, '[^a-z0-9]+', ' ', 'g')) || '([^a-z0-9]|$)') or lower(m.eight_a_nu_crag_name) ~ ('(^|[^a-z0-9])' || lower(regexp_replace(c2.crag_name, '[^a-z0-9]+', ' ', 'g')) || '([^a-z0-9]|$)') ) ) or ( length(m.eight_a_nu_crag_name) >= 9 and ( c2.crag_name ilike '%' || m.eight_a_nu_crag_name || '%' or m.eight_a_nu_crag_name ilike '%' || c2.crag_name || '%' ) ) ) ) site_crags on true order by m.climbs_missing desc ,"8a.nu Crag"
After
select '<a href="' || substring(c.eight_a_nu_url from '^(.+)/sectors/') || '">' || initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) || '</a>' as "8a.nu Crag" ,count(*) as "Climbs Missing" ,string_agg( '<a href="' || c.url || '">' || c.climb_name || '</a>', ', ' order by c.climb_name ) as "Climbs" from climbs c where c.deleted_on is null and c.crag_id is null and c.eight_a_nu_url is not null and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%' group by substring(c.eight_a_nu_url from '^(.+)/sectors/') ,split_part(c.eight_a_nu_url, '/', 7) order by count(*) desc ,"8a.nu Crag"
Diff
--- before

+++ after

@@ -1,66 +1,28 @@

-with missing_crags as (
- select
- substring(c.eight_a_nu_url from '^(.+)/sectors/') as eight_a_nu_crag_url
- ,split_part(c.eight_a_nu_url, '/', 7) as eight_a_nu_crag_slug
- ,initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) as eight_a_nu_crag_name
- ,count(*) as climbs_missing
- ,string_agg(
- '<a href="' || c.url || '">' || c.climb_name || '</a>',
- ', ' order by c.climb_name
- ) as climbs
- from
- climbs c
- where
- c.deleted_on is null
- and c.crag_id is null
- and c.eight_a_nu_url is not null
- and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%'
- group by
- substring(c.eight_a_nu_url from '^(.+)/sectors/')
- ,split_part(c.eight_a_nu_url, '/', 7)
-)
+select
+ '<a href="' ||
+ substring(c.eight_a_nu_url from '^(.+)/sectors/') ||
+ '">' ||
+ initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) ||
+ '</a>' as "8a.nu Crag"
+ ,count(*) as "Climbs Missing"
+ ,string_agg(
+ '<a href="' || c.url || '">' || c.climb_name || '</a>',
+ ', ' order by c.climb_name
+ ) as "Climbs"

-select
- '<a href="' || m.eight_a_nu_crag_url || '">' || m.eight_a_nu_crag_name || '</a>' as "8a.nu Crag"
- ,m.climbs_missing as "Climbs Missing"
- ,m.climbs as "Climbs"
- ,coalesce(site_crags.crag_exists, '') as "Crag Exists?"
from
- missing_crags m
-left join lateral (
- select
- string_agg(
- '<a href="' || c2.url || '">' || c2.crag_name || '</a>',
- ', ' order by c2.crag_name
- ) as crag_exists
- from
- crags c2
- where
- c2.deleted_on is null
- and (
- (
- length(m.eight_a_nu_crag_name) <= 4
- and lower(regexp_replace(c2.crag_name, '[^a-z0-9]+', '', 'g')) =
- lower(regexp_replace(m.eight_a_nu_crag_name, '[^a-z0-9]+', '', 'g'))
- )
- or
- (
- length(m.eight_a_nu_crag_name) between 5 and 8
- and (
- lower(c2.crag_name) ~ ('(^|[^a-z0-9])' || lower(regexp_replace(m.eight_a_nu_crag_name, '[^a-z0-9]+', ' ', 'g')) || '([^a-z0-9]|$)')
- or lower(m.eight_a_nu_crag_name) ~ ('(^|[^a-z0-9])' || lower(regexp_replace(c2.crag_name, '[^a-z0-9]+', ' ', 'g')) || '([^a-z0-9]|$)')
- )
- )
- or
- (
- length(m.eight_a_nu_crag_name) >= 9
- and (
- c2.crag_name ilike '%' || m.eight_a_nu_crag_name || '%'
- or m.eight_a_nu_crag_name ilike '%' || c2.crag_name || '%'
- )
- )
- )
-) site_crags on true
+ climbs c
+
+where
+ c.deleted_on is null
+ and c.crag_id is null
+ and c.eight_a_nu_url is not null
+ and split_part(c.eight_a_nu_url, '/', 7) not like 'unknown-crag%'
+
+group by
+ substring(c.eight_a_nu_url from '^(.+)/sectors/')
+ ,split_part(c.eight_a_nu_url, '/', 7)
+
order by
- m.climbs_missing desc
+ count(*) desc
,"8a.nu Crag"

< Page 142 >