Operaciones matemáticas son usadas diariamente en el colegio, la universidad, el trabajo, etc. de ahí su importancia de comprenderlas y conocerlas. Con microbit podemos hacer matemáticas y crear interesantes proyectos. En este capítulo aprenderemos a hacer una calculadora usando la tarjeta microbit.

 

Nota: Este artículo hace parte de una serie que trata de la tarjeta Microbit. Vea los otros en esta sección.

 

Los bloques relacionados con matemáticas en microbit (MakeCode), se encuentran ubicados en el menú: “Matemáticas” como muestra la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

Al dar click en este menú aparecerá una ventana como la siguiente:

 

 


 

 

 

Podemos observar bloques relacionados con:

• Suma.

• Resta.

• División.

• Multiplicación.

• Resto de.

• Mínimo.

• Máximo.

• Absoluto.

• Raíz cuadrada.

• Redondeamiento.

• Escoger al azar.

 

Para probar cada una de estas operaciones, podemos utilizar el bloque: “Mostrar número”. Para comenzar, cree un nuevo proyecto dando click en el icono “micro:bit”, como mostrado en la siguiente figura:

 

 


 

 

 

Dele un nombre, y aparecerá un programa con los siguientes bloques:

 

 


 

 

 

En el bloque: “para siempre”, podemos encajar el bloque: “mostrar número” . Para esto de click en el menú: “Básico”, de click en el bloque: “mostrar número” y arrastrarlo hasta encajar en el bloque: “para siempre” como muestra la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

Todos los bloques relacionados con “Matemáticas”, devuelven un número como resultado de la operación que se está ejecutando. Por ejemplo, vamos a sumar 2 números. Para esto, vaya al menú: “Matemáticas” y de click el bloque: suma, luego arrastrarlo hasta encajar en el bloque: “Mostrar número”, como muestra la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

Ahora debe aparecer algo como:

 

 


 

 

 

Podemos dar valores al bloque y comprobar el resultado, ejecutando el programa con el botón: “Iniciar simulador”, como muestra esta figura:

 

 


 

 

 

El siguiente programa:

 

 


 

 

 

Mostrará secuencialmente en el display de LEDs el valor de 10.

 

 


 

 

 

Así, pruebe con diferentes números y vea los resultados. Puede sumar números como:

 


 

 

 

Esta suma mostrará: 58.5 en el display.

 

Para la resta puede repetir los pasos anteriores o puede ir al menú desplegable del bloque: suma (+):

 


 

 

 

y seleccionar la operación matemática que desee usar, como muestra la siguiente figura:

 

 


 

 

 

 

Podemos obtener el “resto de” dividir 2 números, es decir: el número que queda sobrando cuando la división no es exacta, usando el siguiente bloque:

 

 


| Clique na imagem para ampliar |

 

 

Podemos obtener el “mínimo” de 2 números, es decir cual es menor. Por ejemplo el siguiente programa mostrara el numero 3:

 

 


| Clique na imagem para ampliar |

 

 

 

También, podemos obtener el “máximo” de dos números, es decir: cuál número es mayor. Por ejemplo el siguiente programa mostrara el numero 58:

 

 


| Clique na imagem para ampliar |

 

 

 

El bloqueo: “absoluto de”, puede ser usado cuando se quiere saber el valor de un número sin su signo. Si se usa este bloque con un número positivo, el bloque devolverá el mismo número: Por ejemplo es siguiente programa mostrara el numero 24 en el display, eliminando el signo negativo (-).

 

 


| Clique na imagem para ampliar |

 

 

También, podemos calcular la “raíz cuadrada” de un número. Recordemos, la raíz cuadrada de un número es: otro número que cuando se multiplica por sí mismo, se convierte en el número original. Por ejemplo el siguiente programa mostrara el numero 5 en el display:

 

 


| Clique na imagem para ampliar |

 

 

El bloque: “redondeo” es usado con números decimales, para acercar el número hacia su valor entero más próximo, siguiendo la regla: “Si un número tiene una parte fraccionaria mayor o igual a 0.5 , el número se redondea al siguiente valor entero más alto; de lo contrario se redondea al siguiente valor entero más bajo”. El siguiente ejemplo mostrará el número 84 en el display:

 

 


| Clique na imagem para ampliar |

 

 

El siguiente programa muestra el número 47 en el display:

 

 


| Clique na imagem para ampliar |

 

 

Con números decimales podemos obtener el número entero más próximo hacia arriba (ceiling), el numero entero más próximo hacia abajo (floor) y eliminar la parte fraccionaria (truncar). Estas funciones aritméticas, se pueden seleccionar en el menú desplegable del bloque: “redondeo” como muestra la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

 

Con los anteriores operadores y funciones podemos hacer una calculadora y en la siguiente sección veremos cómo hacerla.

 

 

CALCULADORA. BLOQUES BASE

 

Con la tarjeta microbit podemos construir una calculadora de manera muy sencilla. Para comenzar cree un nuevo proyecto, dele algún nombre y genere el siguiente programa:

 


 

 

 

Primero cree 2 variables llamadas “numero1” y “numero2” como mostrado en la siguiente imagen:

 

 


 

 

 

Después vaya al menu “Variables”, de click en el bloque: “establecer para” y arrastrarlo hasta encajar en el bloque: “al iniciar”, como muestra la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

Repita el anterior paso y así poder inicializar las 2 variables: “numero1” y “numero2” con un valor de cero (0), como muestra la imagen:

 

 


 

 

 

Ahora vaya al menú: “Entrada” y de click en el bloque: “al presionarse el botón”, arrastrándolo hasta la ventana de edición, como muestra la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

Repita el paso anterior 2 veces más, hasta tener 3 bloques: “al presionarse el botón” y el menú desplegable de ese bloque:

 

 


 

 

 

Seleccione uno para el botón “A”, otro para el botón “B” y el otro para el botón “A+B”.

 

Ahora, vaya al menu: “Variables” y de click en el bloque: “cambiar por” y arrastrarlo hasta encajar en el bloque: “al presionar el botón A” como muestra la figura:

 


| Clique na imagem para ampliar |

 

 

Repita el anterior paso para el bloque: “al presionar el botón B” y configure en el menú desplegable:

 


 

 

 

el bloque: “cambiar por” de la siguiente forma: en el botón “A”, “cambiar numero1 por” y el botón “B”, “cambiar numero2 por”, como muestra la imagen:

 

 


 

 

 

El bloque: “cambiar por”, lo que hace es incrementar la variable “numero” en 1, así, cuando presionamos el botón A, la variable “numero1”, pasa de 0 para 1, de 1 para 2, de 2 para 3 y así sucesivamente. Ahora es mostrar la variable en el display. Para eso vaya al menú: “Básico” y de click en el bloque: “mostrar número” y arrastrarlo hasta encajar en el bloque: “al presionar el botón”, como muestra la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

 

Ahora, vaya al menu: “Variables” y de click en la variable: “numero1” y arrastrarla hasta encajar en el bloque: “mostrar número”, como muestra la figura:

 

 


| Clique na imagem para ampliar |

 

 

Repita los pasos anteriores para el botón “B” y la variable “numero2”.

 

Ahora vaya al menú: “Básico”, de click en el bloque: “borrar pantalla” y arrástralo hasta encajar en el bloque: “al presionar el botón A+B”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menú: “Básico”, de click en el bloque: “mostrar número”, y arrastrarlo hasta encajar en el bloque: “al presionar el botón A+B”, como muestra la figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menu: “Matemáticas”, de click en el bloque: “suma” y arrastrarlo hasta encajar en el bloque: “mostrar número”, como muestra las siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menu: “Variables”, de click en la variable: “numero1” y arrastrarlo hasta encajar en uno de los operandos del bloque: “suma”, como muestra la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

Ahora, repetir el paso anterior, pero para la variable: “numero2”, como muestra la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

Listo, ya puedes probar la calculadora. Ejecute el programa con el botón: “Iniciar simulador”

 

 


 

 

 

y con el botón “A”, seleccionar un valor que será almacenado en la variable: “numero1”. Con el botón “B”, selecciona un número que será almacenado en la variable: “numero2” y con el botón “A+B”, ejecuta la operación matemática, mostrando el resultado en el display de LEDs. Para probar con resta, multiplicación y división, seleccionada en el menú desplegable del bloque: “suma” (+), como muestra la siguiente imagen:

 

 


 

 

 

 

 

CALCULADORA. BLOQUES MEJORADOS.

 

Ahora, se puede mejorar el programa de la calculadora, agregando bloques para mostrar en el display de LEDs, la operación que se va ha ejecutar, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

El programa sería el siguiente:

 

 


 

 

 

 


 

 

 

 


 

 

 

 


| Clique na imagem para ampliar |

 

 

Para hacer este programa, crear una nueva variable de tipo “texto”, llamada: “operación”. Para crear la variable, vaya al menú: “Variables” y cree la variable. Después de crearla, el menú: “Variables”, debe mostrar algo como en la siguiente figura:

 

 


 

 

 

Ahora, agregar un bloque: “establecer para”, al bloque: “al iniciar”, como mostrado en la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

Después, ir al menú: “Avanzado” y seleccionar el menú: “Texto”. De click en el primer bloque y arrastrarlo hasta encajar en el bloque: “establecer para”, como se muestra en la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Así, la variable “operación” es configurada como de tipo texto y va ha recibir caracteres o texto. Después, vaya al menú: “Básico” y de click en bloque: “mostrar cadena”, arrástralo hasta encajar en el bloque: “al iniciar”. Ahora, vaya al menu: “Variables” y de click en la variable: “operación”, arrastrarla hasta encajar en bloque: “mostrar cadena”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, podemos digitar en el bloque: “establecer operacion para “ ”” el caracter “+”, para representar la suma, el carácter “-”, para representar la resta, el carácter “x”, para representar la multiplicación y el carácter “/”, para representar la división, como muestra la siguiente figura:

 

 


 

 

 

Al código en el bloque: “al presionar botón A+B” también es necesario modificarlo. Para esto, vaya al menú: “Lógica” de click en el bloque: “si entonces” y arrástralo hasta encajar en el bloque: “al presionar botón A+B”

 

 

 


| Clique na imagem para ampliar |

 

 

Ahora, con el botones de expansión (+) y (-) del bloque: “si entonces”, forme el bloque para que sea similar al visto en la siguiente figura:

 

 


 

 

 

Ahora, vaya al menu: “Lógica” y de click en el bloque: “comparación de igualdad” (=) y arrastrarlo hasta encajar en el bloque: “si entonces”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menú: “Avanzado -> Texto” y de click en el bloque: “compara con” y arrastrarlo hasta encajar en el bloque de comparación matemática, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menu: “Variables”, de click en la variable: “operación” y arrastrarla hasta encajar en el bloque: “compara con”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menú: “Básico”, de click en el bloque: “mostrar número” y arrastrarlo hasta encajar en el bloque: “si entonces”. Luego vaya al menú: “Matemáticas”, de click en el bloque de suma y arrastrarlo hasta encajar en el bloque: “mostrar número”. Luego vaya al menú: “Variables” y de click en la variable: “numero1” y arrastrarlo hasta encajar en el bloque de suma. Hacer lo mismo con la variable: “numero2”. Repita este paso para todos los bloques: “si no, si entonces”, pero en el menú: “Matemáticas”, seleccione el bloque de resta, multiplicación y división. Ahora, en los bloques: “compara con”, digite para la suma el carácter “+”, para la resta el carácter “-”, para la multiplicación el carácter “x” y para la división el carácter “/”, como muestra la siguiente figura:

 


 

 

 

Listo, ya puedes probar el programa, para que muestre en el display de LEDs, la operación que se va ha ejecutar (suma, resta, multiplicacion o division), seleccionandola en el bloque: “al iniciar” en el bloque: “establecer “operacion” para”, como muestra la siguiente imagen:

 

 


 

 

 

 

 

CALCULADORA. BLOQUES FINALIZADOS.

 

 

El siguiente programa para la calculadora, hace que al agitarse la tarjeta microbit, automáticamente sea seleccionado una de las operaciones matemáticas: suma, resta, multiplicacion o division.

 

 

 


 

 

 

 


| Clique na imagem para ampliar |

 

 


 

 

 

Para esto vaya al menú: “Entradas” y seleccione el bloque: “si agitado”, como muestra la siguiente imagen:

 

 


 

 

 

Ahora vaya al menú: “Variables” y cree una variable llamada: “tipoContador”. Esta variable se incrementará cada vez que se agite la tarjeta microbit y automáticamente selecciona una operación matemática, mostrándola en el display de LEDs. Observe los bloques que fueron usados en el bloque: “al iniciar” y en el bloque “si agitado” y construya los de la misma forma. Listo ya puedes probar la calculadora. Para agitar la tarjeta microbit de click en el botón: “SHAKE” que aparece en el simulador, como muestra la siguiente figura:

 

 


 

 

 

Divierte e imagina que otros proyectos se pueden hacer con matemáticas y la tarjeta microbit.

 

 

19.083MBMemory Usage44.77msRequest Duration
Joomla! Version5.2.3
PHP Version8.3.20
Identityguest
Response200
Templatecassiopeia
Database
Server
mysql
Version
10.5.22-MariaDB
Collation
latin1_swedish_ci
Conn Collation
utf8mb4_general_ci
$_GET
[]
$_POST
[]
$_SESSION
array:1 [ "joomla" => "***redacted***" ]
$_COOKIE
array:1 [ "c2123392c06423339225f3431360b7e6" => "pcb7ps3mpdhpulsrct07q4plrg" ]
$_SERVER
array:52 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "SCRIPT_NAME" => "/index.php" "RE...
session
array:3 [ "counter" => 6 "timer" => array:3 [ "start" => 1751712823 "last" => 1751712825...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.55KB) (311μs)
  • afterInitialise (1.14MB) (3.59ms)
  • afterRoute (123.27KB) (799μs)
  • beforeRenderComponent com_content (100.79KB) (443μs)
  • Before Access::preloadComponents (all components) (33.45KB) (199μs)
  • After Access::preloadComponents (all components) (107.06KB) (401μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (8μs)
  • After Access::preloadPermissions (com_content) (16.22MB) (22.02ms)
  • Before Access::getAssetRules (id:26944 name:com_content.article.30586) (514.65KB) (808μs)
  • After Access::getAssetRules (id:26944 name:com_content.article.30586) (7.38KB) (35μs)
  • afterRenderComponent com_content (478.04KB) (6.51ms)
  • afterDispatch (2.25KB) (51μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (372.84KB) (2.16ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (378μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (100μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (61.05KB) (1.14ms)
  • beforeRenderRawModule mod_menu (Main Menu) (22.55KB) (242μs)
  • afterRenderRawModule mod_menu (Main Menu) (55.23KB) (697μs)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (15.38KB) (589μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (4.75KB) (76μs)
  • beforeRenderModule mod_menu (Main Menu) (13.93KB) (179μs)
  • afterRenderModule mod_menu (Main Menu) (3.91KB) (60μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (22.14KB) (261μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.44KB) (52μs)
  • afterRender (305.69KB) (3.56ms)
  • 1 x After Access::preloadPermissions (com_content) (16.22MB) (49.18%)
    22.02ms
    1 x afterRenderComponent com_content (478.04KB) (14.53%)
    6.51ms
    1 x afterInitialise (1.14MB) (8.01%)
    3.59ms
    1 x afterRender (305.69KB) (7.94%)
    3.56ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (372.84KB) (4.82%)
    2.16ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (61.05KB) (2.55%)
    1.14ms
    1 x Before Access::getAssetRules (id:26944 name:com_content.article.30586) (514.65KB) (1.8%)
    808μs
    1 x afterRoute (123.27KB) (1.78%)
    799μs
    1 x afterRenderRawModule mod_menu (Main Menu) (55.23KB) (1.56%)
    697μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (15.38KB) (1.32%)
    589μs
    1 x beforeRenderComponent com_content (100.79KB) (0.99%)
    443μs
    1 x After Access::preloadComponents (all components) (107.06KB) (0.9%)
    401μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (0.84%)
    378μs
    1 x afterLoad (85.55KB) (0.69%)
    311μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (22.14KB) (0.58%)
    261μs
    1 x beforeRenderRawModule mod_menu (Main Menu) (22.55KB) (0.54%)
    242μs
    1 x Before Access::preloadComponents (all components) (33.45KB) (0.44%)
    199μs
    1 x beforeRenderModule mod_menu (Main Menu) (13.93KB) (0.4%)
    179μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.22%)
    100μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (4.75KB) (0.17%)
    76μs
    1 x afterRenderModule mod_menu (Main Menu) (3.91KB) (0.13%)
    60μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.44KB) (0.12%)
    52μs
    1 x afterDispatch (2.25KB) (0.11%)
    51μs
    1 x After Access::getAssetRules (id:26944 name:com_content.article.30586) (7.38KB) (0.08%)
    35μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.02%)
    8μs
22 statements were executed, 5 of which were duplicates, 17 unique11.09ms1.66MB
  • SELECT @@SESSION.sql_mode;29μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 156μs1.31KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • UPDATE `incbmx_session` SET `guest` = :guest , `time` = :time , `userid` = :user_id , `username` = :username , `client_id` = :client_id WHERE `session_id` = :session_id59μs992BParams/libraries/src/Session/MetadataManager.php:316Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`41μs608B/libraries/src/Access/Access.php:955Copy
  • SELECT `b`.`id` FROM `incbmx_usergroups` AS `a` LEFT JOIN `incbmx_usergroups` AS `b` ON `b`.`lft` <= `a`.`lft` AND `b`.`rgt` >= `a`.`rgt` WHERE `a`.`id` = :guest61μs1.64KBParams/libraries/src/Access/Access.php:868Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`194μs3.98KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` IN (:preparedArray1,:preparedArray2,:preparedArray3,:preparedArray4,:preparedArray5,:preparedArray6,:preparedArray7,:preparedArray8,:preparedArray9,:preparedArray10,:preparedArray11,:preparedArray12,:preparedArray13,:preparedArray14,:preparedArray15,:preparedArray16,:preparedArray17,:preparedArray18,:preparedArray19,:preparedArray20,:preparedArray21,:preparedArray22,:preparedArray23,:preparedArray24,:preparedArray25,:preparedArray26,:preparedArray27,:preparedArray28,:preparedArray29,:preparedArray30,:preparedArray31,:preparedArray32,:preparedArray33,:preparedArray34,:preparedArray35,:preparedArray36,:preparedArray37,:preparedArray38,:preparedArray39)248μs7.44KBParams/libraries/src/Access/Access.php:357Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` LIKE :asset OR `name` = :extension OR `parent_id` = 07.73ms1.48MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`339μs2.39KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '30586'212μs48B/libraries/src/Table/Table.php:1348Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)215μs70.13KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`178μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`tag_id`,`t`.* FROM `incbmx_contentitem_tag_map` AS `m` INNER JOIN `incbmx_tags` AS `t` ON `m`.`tag_id` = `t`.`id` WHERE `m`.`type_alias` = :contentType AND `m`.`content_item_id` = :id AND `t`.`published` = 1 AND `t`.`access` IN (:preparedArray1,:preparedArray2)237μs3.98KBParams/libraries/src/Helper/TagsHelper.php:388Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`164μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT DISTINCT a.id, a.title, a.name, a.checked_out, a.checked_out_time, a.note, a.state, a.access, a.created_time, a.created_user_id, a.ordering, a.language, a.fieldparams, a.params, a.type, a.default_value, a.context, a.group_id, a.label, a.description, a.required, a.only_use_in_subform,l.title AS language_title, l.image AS language_image,uc.name AS editor,ag.title AS access_level,ua.name AS author_name,g.title AS group_title, g.access as group_access, g.state AS group_state, g.note as group_note FROM incbmx_fields AS a LEFT JOIN `incbmx_languages` AS l ON l.lang_code = a.language LEFT JOIN incbmx_users AS uc ON uc.id=a.checked_out LEFT JOIN incbmx_viewlevels AS ag ON ag.id = a.access LEFT JOIN incbmx_users AS ua ON ua.id = a.created_user_id LEFT JOIN incbmx_fields_groups AS g ON g.id = a.group_id LEFT JOIN `incbmx_fields_categories` AS fc ON fc.field_id = a.id WHERE ( (`a`.`context` = :context AND (`fc`.`category_id` IS NULL OR `fc`.`category_id` IN (:preparedArray1,:preparedArray2,:preparedArray3)) AND `a`.`access` IN (:preparedArray4,:preparedArray5)) AND (`a`.`group_id` = 0 OR `g`.`access` IN (:preparedArray6,:preparedArray7)) AND `a`.`state` = :state) AND (`a`.`group_id` = 0 OR `g`.`state` = :gstate) AND `a`.`only_use_in_subform` = :only_use_in_subform ORDER BY a.ordering ASC387μs4.81KBParams/libraries/src/MVC/Model/BaseDatabaseModel.php:164Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`163μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`id`,`m`.`title`,`m`.`module`,`m`.`position`,`m`.`content`,`m`.`showtitle`,`m`.`params`,`mm`.`menuid` FROM `incbmx_modules` AS `m` LEFT JOIN `incbmx_modules_menu` AS `mm` ON `mm`.`moduleid` = `m`.`id` LEFT JOIN `incbmx_extensions` AS `e` ON `e`.`element` = `m`.`module` AND `e`.`client_id` = `m`.`client_id` WHERE ( ( (`m`.`published` = 1 AND `e`.`enabled` = 1 AND `m`.`client_id` = :clientId AND `m`.`access` IN (:preparedArray1,:preparedArray2)) AND (`m`.`publish_up` IS NULL OR `m`.`publish_up` <= :publishUp)) AND (`m`.`publish_down` IS NULL OR `m`.`publish_down` >= :publishDown)) AND (`mm`.`menuid` = :itemId OR `mm`.`menuid` <= 0) ORDER BY `m`.`position`,`m`.`ordering`287μs3.25KBParams/libraries/src/Cache/Controller/CallbackController.php:120Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1129μs656B/administrator/components/com_finder/src/Helper/LanguageHelper.php:135Copy
  • SELECT `title` FROM `incbmx_finder_taxonomy` WHERE `parent_id` = 1 AND `state` = 1 AND `access` IN (1,5)78μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context61μs1.55KBParams/plugins/system/schemaorg/src/Extension/Schemaorg.php:403Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)155μs70.17KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT SUM(CASE WHEN `a`.`next_execution` <= :now THEN 1 ELSE 0 END) AS due_count,SUM(CASE WHEN `a`.`locked` IS NULL THEN 0 ELSE 1 END) AS locked_count FROM `incbmx_scheduler_tasks` AS `a` WHERE `a`.`state` = 171μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy