Maison >Périphériques technologiques >Industrie informatique >Comprendre l'élixir interroge DSL: les bases
ecto interroge dans Elixir: A débutant Guide
Cet article présente Ecto, le langage de requête d'Elixir, vous guidant à travers des techniques de requête de base. Nous couvrirons les jointures, les associations, l'agrégation, etc., en supposant une compréhension de base des principes fondamentaux de l'élixir et de l'Ecto.
Concepts clés:
where
, limit
, offset
et distinct
permettent une sélection précise de données. group_by
, having
, count
, avg
, sum
, min
, max
) permettent des calculs de données complexes. En démarrage avec l'application ectoing
:
Les exemples utilisent l'application ectoing
. Clone, configurer et migrer la base de données comme suit:
<code class="language-bash">git clone https://github.com/tpunt/ectoing cd ectoing mix deps.get # Update credentials in config/config.exs mix ecto.create mix ecto.migrate mix run priv/repo/seeds.exs</code>
(MySQL est utilisé ici; Bien que adaptable à d'autres bases de données, certains exemples ultérieurs pourraient être spécifiques à MySQL.)
Le schéma de base de données:
requêtes de base:
Commençons par des requêtes simples. N'oubliez pas d'importer Ecto.Query
dans la coquille d'élixir (iex -S mix
).
Remplir tous les utilisateurs:
SQL:
<code class="language-sql">SELECT * FROM users;</code>
ecto (syntaxe des mots clés):
<code class="language-elixir">query = Ectoing.User Ectoing.Repo.all(query)</code>
ecto (syntaxe macro):
<code class="language-elixir">query = Ectoing.User |> Ecto.Query.all() Ectoing.Repo.all(query)</code>
Sélection de champs spécifiques (premier nom, nom de famille):
SQL:
<code class="language-sql">SELECT firstname, surname FROM users;</code>
ecto (syntaxe des mots clés):
<code class="language-elixir">query = from u in Ectoing.User, select: [u.firstname, u.surname] Ectoing.Repo.all(query)</code>
ecto (syntaxe macro):
<code class="language-elixir">query = Ectoing.User |> Ecto.Query.select([u], [u.firstname, u.surname]) Ectoing.Repo.all(query)</code>
Les résultats seront des listes de listes, de tuples ou de cartes en fonction de la structure de la clause select
.
Filtrage et personnalisation des résultats:
Affinons les requêtes pour sélectionner des sous-ensembles de données.
Sélection des utilisateurs avec nom de famille "Doe":
SQL:
<code class="language-sql">SELECT * FROM users WHERE surname = "doe";</code>
ecto (syntaxe des mots clés):
<code class="language-elixir">surname = "doe" query = from u in Ectoing.User, where: u.surname == ^surname Ectoing.Repo.all(query)</code>
ecto (syntaxe macro):
<code class="language-elixir">surname = "doe" query = Ectoing.User |> Ecto.Query.where([u], u.surname == ^surname) Ectoing.Repo.all(query)</code>
Sélection des noms de famille distincts, ordonnés et limités:
SQL:
<code class="language-sql">SELECT DISTINCT surname FROM users LIMIT 3 ORDER BY surname;</code>
ecto (syntaxe des mots clés):
<code class="language-elixir">query = from u in Ectoing.User, select: u.surname, distinct: true, limit: 3, order_by: u.surname Ectoing.Repo.all(query)</code>
ecto (syntaxe macro):
<code class="language-elixir">query = Ectoing.User |> Ecto.Query.select([u], u.surname) |> Ecto.Query.distinct(true) |> Ecto.Query.limit(3) |> Ecto.Query.order_by([u], u.surname) Ectoing.Repo.all(query)</code>
Requêtes d'agrégation:
ecto prend en charge les fonctions d'agrégation.
trouver des utilisateurs avec une note d'amie moyenne de 4 ou plus:
SQL:
<code class="language-sql">SELECT friend_id, avg(friend_rating) AS avg_rating FROM friends GROUP BY friend_id HAVING avg_rating >= 4 ORDER BY avg_rating DESC;</code>
ecto (syntaxe des mots clés):
<code class="language-elixir">query = from f in Ectoing.Friend, select: %{friend_id: f.friend_id, avg_rating: avg(f.friend_rating)}, group_by: f.friend_id, having: avg(f.friend_rating) >= 4, order_by: [desc: avg(f.friend_rating)] Ectoing.Repo.all(query)</code>
ecto (syntaxe macro): (structure similaire à la syntaxe des mots clés, en utilisant l'opérateur de tuyau)
Conclusion:
Cette introduction couvre les bases de requête d'Ecto. Les étapes suivantes impliquent d'explorer les jointures, les requêtes complexes et les techniques avancées. Reportez-vous à la documentation Ecto pour un guide complet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!