AppMaster นำเสนอความสามารถที่หลากหลายสำหรับการทำงานกับฐานข้อมูล ตัวอย่างเช่น เมื่อใช้บล็อกการค้นหา คุณสามารถค้นหาข้อมูลที่จำเป็น แนบตารางที่เกี่ยวข้อง จัดเรียงตามลำดับที่ถูกต้อง เป็นต้น อย่างไรก็ตาม ในบางสถานการณ์ นี่อาจไม่เพียงพอ จากนั้นบล็อก SQL Exec ก็มาถึง การช่วยเหลือ. ช่วยให้คุณสามารถเรียกใช้การสืบค้นฐานข้อมูลโดยใช้ SQL เต็มรูปแบบ

ลองพิจารณาการทำงานของบล็อกโดยใช้ตัวอย่างของฐานข้อมูลที่มีแคตตาล็อกหนังสือ

Database structure

มาเตรียมงานกันหน่อย จำเป็นต้องสร้างกระบวนการทางธุรกิจที่จะอนุญาตให้ส่งคำขอรวมทั้งรับผลลัพธ์ในรูปแบบที่ง่ายที่สุดได้

Business process

คุณจะต้องสร้างจุดสิ้นสุดที่จะช่วยให้คุณสามารถเข้าถึงกระบวนการทางธุรกิจนี้ได้

Endpoint

ในระยะแรกนี้ควรจะเพียงพอแล้ว คุณสามารถเผยแพร่แอปพลิเคชันของคุณและดำเนินการทดสอบต่อไปได้ ด้วยเหตุนี้การใช้ Swagger จะสะดวกมากซึ่งจะสร้างขึ้นโดยอัตโนมัติเมื่อเผยแพร่

เราใช้แบบสอบถามง่ายๆ ที่ควรขอหนังสือทั้งหมดจากฐานข้อมูล

SELECT * จาก public.book

โปรดทราบว่าตัวตารางเอง (เช่นเดียวกับตารางอื่นๆ ทั้งหมดที่สร้างในตัวแก้ไขฐานข้อมูล) มีส่วนนำหน้าที่ระบุสคีมา - สาธารณะ

SQL Request

คุณสามารถตรวจสอบได้ว่าคำขอเสร็จสมบูรณ์และได้รับผลลัพธ์แล้ว

SQL Response

แต่ปัญหาคือการรับรู้คำตอบในรูปแบบนี้ยากมาก วิธีแก้ไขที่เป็นไปได้คือแก้ไขคำขอเล็กน้อยและเหลือเฉพาะฟิลด์ที่จำเป็น เช่น ชื่อหนังสือและจำนวนหน้า นอกจากนี้ ก็สมเหตุสมผลที่จะกำหนดขีดจำกัด โดยไม่ได้ขอหนังสือทุกเล่มจากฐานข้อมูล แต่จำกัดตัวคุณเองไว้ที่สิบเล่ม

เลือกชื่อ หน้าจาก public.book จำกัด 10

SQL Response

ดีขึ้นมากแต่ยังไม่เหมาะกับการใช้งานจริง ท้ายที่สุดแล้ว ในกระบวนการทางธุรกิจ คุณไม่เพียงต้องได้รับคำขอเท่านั้น แต่ยังต้องดำเนินการบางอย่างเพื่อให้ได้รับผลลัพธ์อีกด้วย ด้วยเหตุนี้การได้ผลลัพธ์ในรูปแบบข้อความยังไม่เพียงพอ คุณต้องแปลงให้เป็นรุ่นที่เหมาะกับการใช้งานต่อไป

เมื่อต้องการทำเช่นนี้ กลับไปที่กระบวนการทางธุรกิจและปรับแต่งเล็กน้อย ในบล็อกสุดท้าย เราจะเพิ่มตัวแปรใหม่ - อาร์เรย์ของโมเดลหนังสือ

Book Variable

คุณจะต้องมีบล็อกที่จะแปลง JSON ที่ได้รับอันเป็นผลมาจากคำขอให้เป็นโมเดล ดีซีเรียลไลซ์ JSON ให้เป็นโมเดล

Updated Business process

ทำซ้ำคำขอก่อนหน้าและตรวจสอบให้แน่ใจว่าผลลัพธ์มีความเหมาะสมมากขึ้นทั้งสำหรับการรับรู้ทางสายตาและเพื่อใช้ใน BP ต่อไป

Updated SQL Response

ตอนนี้เราไปยังตรรกะที่ซับซ้อนมากขึ้นได้แล้ว มาสร้างกระบวนการทางธุรกิจที่:

  • รับชื่อหนังสือเป็นอินพุต
  • กำหนดหมวดหมู่ (ประเภท) ที่เป็นของ
  • ส่งคืนหนังสือแบบสุ่ม 3 เล่มจากหมวดหมู่เดียวกันตามผลลัพธ์ (ในกรณีนี้ หนังสือจากคำขอไม่ควรอยู่ในนั้น)

เมื่อต้องการทำเช่นนี้ เราจะสร้างกระบวนการทางธุรกิจใหม่ที่รวมการค้นหาโดยใช้บล็อกมาตรฐานและการใช้แบบสอบถาม SQL

บล็อกแรกคือการค้นหาหนังสือตามชื่อหนังสือและพิจารณาว่าหนังสือนั้นอยู่ในหมวดหมู่ใด ในการดำเนินการนี้ เราใช้บล็อกการค้นหาพร้อมพารามิเตอร์ต่อไปนี้:

  • _ด้วย = หมวดหมู่ - นอกเหนือจากตัวหนังสือแล้ว ผลลัพธ์การค้นหายังต้องการข้อมูลจากตารางหมวดหมู่ที่เกี่ยวข้อง
  • _Limit = 1 - ต้องพบหนังสือเล่มเดียวเท่านั้น
  • _Ilike = False - ชื่อจะต้องตรงกับชื่อที่ร้องขอทุกประการ
  • ชื่อ - ดัชนีชื่อหนังสือที่ส่งผ่านจากบล็อกเริ่มต้น

การใช้บล็อกองค์ประกอบ Array ที่มีดัชนี 0 เราจะนำหนังสือเล่มแรก (และเท่านั้น) จากผลลัพธ์

หนังสือสามารถอยู่ในหมวดหมู่ต่างๆ ได้หลายประเภทในเวลาเดียวกัน และในกรณีนี้ หนังสือเหล่านั้นจะเหมาะกับเรา สามารถเลือกได้แบบสุ่มโดยใช้บล็อกองค์ประกอบสุ่ม

หลังจากนี้ เรามีข้อมูลที่จำเป็นทั้งหมด และสิ่งที่เหลืออยู่คือการสร้างคำขอเอง ซึ่งอาจมีลักษณะดังนี้:

SELECT * จาก public.book WHERE id IN (SELECT rel1_id จาก public.book_categorys_category_books_pivot WHERE book_categorys_category_books_pivot.rel2_id = X) และ id <> Y เรียงลำดับโดยการสุ่ม() จำกัด 3

โดยที่ X คือรหัสของหมวดหมู่หนังสือ และ Y คือรหัสของหนังสือ

โปรดทราบว่าแบบสอบถามนี้มีแบบสอบถามย่อยด้วย อันดับแรก จากตาราง book_categorys_category_books_pivot (ใช้เพื่อเก็บข้อมูลเกี่ยวกับความสัมพันธ์ระหว่างสองตาราง) จะพบตัวระบุหนังสือทั้งหมดที่สอดคล้องกับหมวดหมู่ที่เลือก หลังจากนั้น แบบสอบถามจะถูกดำเนินการโดยค้นหาหนังสือแบบสุ่ม 3 เล่มที่ตรงกับช่วงที่ระบุ ไม่รวมรหัสหนังสือซึ่งมีการส่งชื่อไปยังกระบวนการทางธุรกิจแต่เดิม

หากต้องการศึกษาโครงสร้างฐานข้อมูลโปรเจ็กต์อย่างละเอียดยิ่งขึ้น คุณสามารถใช้ปุ่ม Open DB ในการตั้งค่า Deploy Plans

จะช่วยให้คุณสามารถเปิดฐานข้อมูลในตัวแก้ไขและเข้าถึงการดูและแก้ไขข้อมูลได้โดยตรง อย่างไรก็ตาม คุณควรใช้ความระมัดระวังและคำนึงถึงความจริงที่ว่าการเปลี่ยนแปลงโครงสร้างข้อมูลในตัวแก้ไขจะทำให้ไม่สามารถเผยแพร่โครงการต่อไปได้

กลับไปที่การสร้างกระบวนการทางธุรกิจ จำเป็นต้องรวบรวมคำขอให้เสร็จสิ้น และแปลงหนังสือและรหัสหมวดหมู่จากจำนวนเต็มเป็นสตริง และรวบรวมคำขอสุดท้ายโดยใช้บล็อก Concat Strings (หลายรายการ)

ขั้นตอนสุดท้ายคือดำเนินการแบบสอบถาม แปลงผลลัพธ์เป็นรูปแบบ และส่งไปยังบล็อกสิ้นสุดเป็นผลลัพธ์แบบสอบถาม

no-code

คุณสามารถบันทึกการเปลี่ยนแปลง สร้างตำแหน่งข้อมูล เผยแพร่โครงการของคุณ และตรวจสอบว่าคำขอทำงานได้อย่างถูกต้อง ในกรณีนี้ บล็อก SQL Exec หนึ่งบล็อกที่มีการสืบค้นแบบผสมที่ซับซ้อนถูกนำมาใช้เพื่อแทนที่บล็อกอื่นๆ จำนวนมาก และทำให้โครงสร้างของกระบวนการทางธุรกิจง่ายขึ้น

การใช้บล็อก SQL Exec ไม่ได้จำกัดอยู่เพียงการดึงข้อมูลและสามารถใช้ได้ในสถานการณ์ที่หลากหลาย ลองมาดูตัวเลือกเพิ่มเติมอีกสองสามอย่างให้ละเอียดยิ่งขึ้น

  • การนับจำนวนความคิดเห็นของหนังสือด้วย id=X
    เลือก COUNT(id) จาก public.comment โดยที่ book_id = X
  • การคำนวณคะแนนเฉลี่ยของหนังสือโดยคำนึงถึงคะแนนทั้งหมดที่ระบุในความคิดเห็น:
    เลือก AVG (อัตรา) จาก public.comment โดยที่ book_id = X
  • การลบความคิดเห็นทั้งหมดที่เขียนก่อนปี 2023 (สามารถใช้เพื่อล้างบันทึกได้อย่างรวดเร็ว)
    ลบ * จาก public.comment โดยที่ create_at < '2023-01-01'

โดยสรุปเป็นที่น่าสังเกตว่าเพื่อปรับปรุงความปลอดภัยจึงมีการเพิ่มตัวกรองลงในบล็อก SQL Exec สำหรับการดำเนินการที่เป็นอันตรายซึ่งอาจนำไปสู่การเปลี่ยนแปลงสคีมา

CREATE/ALTER/DROP/TRUNCATE for TABLE|COLUMN|INDEX|CONSTRAINT|SEQUENCE|SCHEMA|DATABASE ถูกปิดใช้งานโดยตัวกรองหากแอปพลิเคชันโฮสต์บนเซิร์ฟเวอร์ AppMaster เมื่อโฮสต์ภายในองค์กร - ตามค่าเริ่มต้น คำขอใดๆ จะสามารถใช้ได้โดยไม่มีข้อจำกัด

Was this article helpful?

AppMaster.io 101 หลักสูตรความผิดพลาด

10 โมดูล
2 สัปดาห์ที่ผ่านมา

ไม่แน่ใจว่าจะเริ่มต้นที่ไหน? เริ่มต้นด้วยหลักสูตรเร่งรัดสำหรับผู้เริ่มต้นและสำรวจ AppMaster จาก A ถึง Z

เริ่มหลักสูตร
Development it’s so easy with AppMaster!

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่?

แก้ปัญหาด้วยความช่วยเหลือจากผู้เชี่ยวชาญของเรา ประหยัดเวลาและมุ่งเน้นที่การสร้างแอปพลิเคชันของคุณ

headphones

ติดต่อฝ่ายสนับสนุน

บอกเราเกี่ยวกับปัญหาของคุณ แล้วเราจะหาทางแก้ไขให้คุณ

message

ชุมชนแชท

สนทนาคำถามกับผู้ใช้รายอื่นในการแชทของเรา

เข้าร่วมชุมชน