La lógica booleana es ampliamente usada en electrónica, programación de microcontroladores y computadores. S basa en 2 estados: verdadero o falso. con estos valores podemos ejecutar una serie de operaciones (or, and, not) y hacer proyectos inteligentes como veremos en este capítulo. algo interesante de la lógica booleana, es que es muy semejante a la lógica o sentido común usado por el pensamiento.

 

 

Existen básicamente los siguientes operadores booleanos:

Operador OR.

Operador AND.

Operador NOT.

 

Las operaciones que se pueden hacer con esta lógica (OR, AND, NOT), siempre recibe valores booleanos y retorna o devuelve, un valor booleano. Una variable booleana, sólo puede tener 2 estados: o es “verdadero” (true) o es “falso” (false).

 

A continuación se explica como funciona la lógica booleana. En muchos libros de electrónica y de computación, usan el número “1”, para representar el estado: Verdadero y el número: “0”, para representar el estado: Falso. En este capítulo usaremos las 2 formas de representación. También, serán usados interruptores, para representar los estados de una variable booleana. Si el interruptor está abierto, la variable tiene el estado: falso. Si el interruptor está cerrado, la variable tiene el estado: verdadero.

 

 

 

LÓGICA OR.

 

La palabra “OR” viene del idioma inglés y traducido significa “O”. La lógica OR sigue el principio mostrado en el siguiente circuito:

 

 


 

 

 

Observemos que la lámpara se enciende, cuando se cierra cualquiera de los dos interruptores. En otras palabras, la lámpara se enciende cuando se cierra el interruptor A o cuando se cierra el interruptor B. Esto es lógica OR. Es decir: si se cumple una sola de las condiciones, el objetivo se alcanza. También notamos que si se cierran los 2 interruptores (A y B), la lámpara también enciende. Al construir la tabla de verdad o el principio de funcionamiento para la lógica OR, se obtienen los resultados mostrados en la siguiente figura:

 


 

 

 

 

La misma representación la podemos hacer con los valore de verdadero y falso, como muestra la siguiente figura:

 

 


 

 

 

Es muy probable que te en tu diario vivir hayas escuchado frases como:

“Si limpias la cocina o limpias el jardín, podrás ir a la fiesta”.

“Para beber algo caliente, tenemos te o cafe”

Estas son expresiones que siguen la lógica “O” (OR).

 

En la tarjeta microbit también podemos usar este tipo de lógica OR. Para esto vaya a la función de menú: Lógica, como se muestra en la siguiente figura:

 

 


 

 

 

Aparecerá una ventana como la siguiente:

 

 


 

 

 

En el sector Booleano, podemos ver la lógica OR como mostrado en la siguiente figura:

 


 

 

 

El siguiente ejemplo usa los botones A y B, para mostrar el uso de la lógica OR:

 

 


| Clique na imagem para ampliar |

 

 

Para construir el anterior programa, cree un nuevo programa y dele un nombre. Aparecerá la siguiente imagen:

 

 


 

 

 

Vaya a la función de menú: “Básico”, haga click sobre el bloque: “mostrar LEDs” y arrastralo hasta encajar en el bloque: “al iniciar”, como muestra las siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, haga click sobre los cuadros del bloque: “mostrar LEDs”, para que muestre la siguiente figura:

 

 


 

 

 

Ahora vaya al menu: “Lógica” y de click en el bloque: “si entonces”, arrastrandolo y encajando en el bloque: “para siempre”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menu: “Lógica” y seleccione en el item: “Boolean”, el bloque: “o”, arrastrándolo hasta encajar en la expresión a evaluar del bloque: “si entonces”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menú: “Entrada” y de click en el bloque: “botón presionado”, arrastrándolo hasta encajar en una de las expresiones a evaluar del bloque lógico: “o”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Hacer lo mismo para la otra expresión del bloque: “o” como muestra la siguiente figura:

 

 


 

 

 

Ahora, en uno de los bloques: “botón presionado”, seleccionar en el menú desplegable el botón “B”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Ahora, vaya al menú: “Básico”, de click en el bloque: “mostrar icono” y arrastrarlo hasta encajar en el bloque: “si entonces”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Listo, ya puedes ejecutar el programa con el botón: “iniciar el simulador”.

 


 

 

 

Observar como al presionar cualquiera de los botones A o B, se muestra en el display de LEDs la siguiente figura:

 


 

 

 

 

 

LÓGICA AND.

 

La lógica puede ser comprendida observando el siguiente circuito:

 


 

 

 

Observe, que los interruptores A y B deben estar cerrados para que la lámpara se prenda. En otras palabras: es necesario que se cumplan todos los requisitos para obtener el objetivo. La siguiente es la tabla de verdad o modo de funcionamiento para la lógica AND:

 

 


 

 

 

 


 

 

 

Probablemente en la vida diaria, habrás escuchado frases como:

“Para la prueba de matemáticas, es necesario traer una hoja cuadriculada y compás”.

“Puedes salir este fin de semana, si limpias el jardín y limpias la cocina”.

“Pueden viajar, si presentan el pasaje de avión y el pasaporte”

Las anteriores son expresiones que usan lógica AND.

 

En la tarjeta microbit podemos usar la lógica AND. Para usarla, vaya hasta el menú: “Lógica”, y en la ventana que aparece, vaya hasta el sector: “Booleano”. Observe la figura siguiente:

 

 


 

 

 

 

 

El siguiente ejemplo usa los botones A y B, para mostrar el uso de la lógica AND:

 

 


| Clique na imagem para ampliar |

 

 

 

Para construir el anterior programa, siga los mismos pasos usados en el programa ejemplo de lógica OR. En el momento de seleccionar el bloque booleano, seleccione la lógica AND, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

 

 

LÓGICA NOT.

 

La lógica NOT invierte el valor de un bit, es decir: si un valor está en 0 (false), la lógica NOT, lo pasa para 1 (true) y si el bit estaba en 1 (true) la lógica NOT, lo pasa para 0 (false). La tabla de verdad para la lógica NOT, se puede observar en la siguiente figura:

 

 


 

 

 

 

En la tarjeta microbit también podemos usar este tipo de lógica. Para usarla vaya al sector booleano del menú: “Lógica”, como muestra la siguiente figura:

 

 


 

 

 

En los próximos capítulos realizaremos proyectos donde podemos ver el uso y funcionamiento de este operador lógico.

 

 

 

COMO CREAR UNA VARIABLE O DATO “BOOLEANO”.

 

Para crear una variable “Booleana” vaya hasta la función: “Variables” como mostrado en la siguiente imagen:

 

 


 

 

 

De click en el botón: “Crear una variable…” y en cuadro de diálogo que aparece, de algún nombre para el cual será usada la variable booleana. En este ejemplo, le he nombrado “alarmeEnable” como muestra la siguiente figura:

 

 


 

 

 

Después de click en el botón: “Aceptar”. Aparecerá una ventana como la mostrada en la siguiente figura:

 

 


 

 

 

Ahora, de click en la función: “establecer alarmeEnable para” como muestra la siguiente figura y arrastrarlo para el bloque “al iniciar”.

 

 


| Clique na imagem para ampliar |

 

 

Cuando ya esté encajado en el bloque: “al iniciar”, vaya hasta la funcion del menu: “Lógica”:

 

 


 

 

 

y arrastre uno de los 2 posibles valores para una variable booleana (true o false) como muestra la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

El compilador de Makecode, reconoce automáticamente que fue asignado un valor de verdadero o falso (true, false) y va a tratar esta variable (alarmeEnable) cómo booleana.

 

 

 

ALARMA DOMÉSTICA CON LÓGICA BOOLEANA.

 

 

Con las funciones o lógica booleana, podemos hacer infinidad de proyectos. Por ejemplo podemos hacer una alarma domestica. Esta alarma posee 2 sensores: uno para una puerta y otro para una ventana. Si el sensor de la puerta o el sensor de la ventana se activan entonces la alarma sonará. Para que la alarma suene, es necesario que algún sensor se haya disparado y la alarma esté habilitada.

 

Observe, como en el texto anterior, donde definimos como va ha funcionar la alarma, podemos notar la lógica booleana OR:

 

Si el sensor de la puerta “o” el sensor de la ventana se activan entonces la alarma sonará.

 

También notamos la función booleana AND:

 

Para que la alarma suene, es necesario que algún sensor se haya disparado “y” la alarma esté habilitada.

 

El código final para la alarma es mostrado en la siguiente imagen:

 

 

 

 


| Clique na imagem para ampliar |

 

 

Vamos entonces a crear el proyecto y de un nombre. Después, cree 2 variables con los nombres: “sensorDetectado” y “alarmaHabilitada” como muestra la siguiente figura:

 


 

 

 

 

Ahora de click en el bloque “establecer para” y arrastrarlo hasta encajar en el bloque: “al iniciar”, como muestra la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

 

Repita la anterior operación para ser igual o similar a lo mostrado en la siguiente imagen:

 


 

 

 

En el menú desplegable del bloque: “establecer para”, seleccionar un bloque para la variable “alarmaHabilitada” y otro para la variable “sensorHabilitado”, como muestra la siguiente figura:

 


 

 

 

Ahora, vaya al menu: “Lógica” y arrastra el valor: “Verdadero” hasta encajar en el bloque: “establecer para”, como muestra la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

Hacer lo mismo para la variable: “sensorDetectado”, pero con el valor: “falso”, como muestra la siguiente imagen:

 

 


 

 

 

Ahora, agregar el bloque: “mostrar LEDs”, como muestra la imagen:

 

 


 

 

 

Después, en el bloque: “para siempre”, agregue 2 bloques: “si entonces”, como muestra la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

En el primer bloque: “si entonces”, repita los pasos, del ejemplo seguido para la lógica OR, y forme el siguiente bloque como se muestra en la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Para el segundo bloque: “si entonces”, crear el siguiente código:

 

Para hacerlo, vaya al menu: “Lógica” y agregue un bloque booleano “y” (AND), luego agregar a la expresión a evaluar, las 2 variables como muestra las siguientes imágenes:

 


| Clique na imagem para ampliar |

 

 


| Clique na imagem para ampliar |

 

 

El segundo bloque: “si entonces”, debe ser similar al mostrado en la siguiente figura:

 

 


 

 

 

Ahora ya puede ejecutar el programa y ver su funcionamiento. Observemos que mientras no se presione ningún botón, observaremos en el display de LEDs muestra la siguiente imagen:

 

 


 

 

 

Cuando la alarma se dispara podemos observar la siguiente imagen:

 

 


 

 

 

 

Hemos usado los botones A y B, para simular el sensor de la puerta y el de la ventana, pero en próximos capítulos aprenderemos a usar las entradas y salidas digitales encontradas en la tarjeta microbit como muestra la siguiente imagen:

 

 


 

 

 

Con los operadores lógicos vistos anteriormente (OR, AND, NOT), podemos formar otros operadores lógicos como: NAND, NOR, XOR y YES, pero los más usados en programación de microcontroladores (como microbit) son: AND, OR y NOT. También podemos tener expresiones booleanas AND y OR, con muchas más entradas, por ejemplo una AND de tres entradas, pero el principio de funcionamiento que se sigue es siempre el mismo, es decir que la salida solo será “verdadera” cuando todas las entradas son verdaderas.

 

 

19.022MBMemory Usage37.74msRequest 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
[]
$_SERVER
array:51 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "SCRIPT_NAME" => "/index.php" "RE...
session
array:3 [ "counter" => 1 "timer" => array:3 [ "start" => 1749387117 "last" => 1749387117...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.55KB) (216μs)
  • afterInitialise (1.14MB) (3.2ms)
  • afterRoute (179.21KB) (777μs)
  • beforeRenderComponent com_content (100.98KB) (372μs)
  • Before Access::preloadComponents (all components) (33.45KB) (158μs)
  • After Access::preloadComponents (all components) (107.06KB) (350μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (8μs)
  • After Access::preloadPermissions (com_content) (16.22MB) (19.07ms)
  • Before Access::getAssetRules (id:26941 name:com_content.article.30583) (514.65KB) (679μs)
  • After Access::getAssetRules (id:26941 name:com_content.article.30583) (7.38KB) (37μs)
  • afterRenderComponent com_content (457.25KB) (5.82ms)
  • afterDispatch (2.25KB) (42μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (358.53KB) (1.52ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (289μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (86μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (64.9KB) (1.05ms)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (9.27KB) (523μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (5.47KB) (61μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (6.64KB) (182μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (48μs)
  • afterRender (289.75KB) (3.15ms)
  • 1 x After Access::preloadPermissions (com_content) (16.22MB) (50.54%)
    19.07ms
    1 x afterRenderComponent com_content (457.25KB) (15.43%)
    5.82ms
    1 x afterInitialise (1.14MB) (8.47%)
    3.20ms
    1 x afterRender (289.75KB) (8.34%)
    3.15ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (358.53KB) (4.03%)
    1.52ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (64.9KB) (2.78%)
    1.05ms
    1 x afterRoute (179.21KB) (2.06%)
    777μs
    1 x Before Access::getAssetRules (id:26941 name:com_content.article.30583) (514.65KB) (1.8%)
    679μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (9.27KB) (1.39%)
    523μs
    1 x beforeRenderComponent com_content (100.98KB) (0.99%)
    372μs
    1 x After Access::preloadComponents (all components) (107.06KB) (0.93%)
    350μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (0.77%)
    289μs
    1 x afterLoad (85.55KB) (0.57%)
    216μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (6.64KB) (0.48%)
    182μs
    1 x Before Access::preloadComponents (all components) (33.45KB) (0.42%)
    158μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.23%)
    86μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (5.47KB) (0.16%)
    61μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (0.13%)
    48μs
    1 x afterDispatch (2.25KB) (0.11%)
    42μs
    1 x After Access::getAssetRules (id:26941 name:com_content.article.30583) (7.38KB) (0.1%)
    37μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.02%)
    8μs
21 statements were executed, 5 of which were duplicates, 16 unique10.58ms1.66MB
  • SELECT @@SESSION.sql_mode;37μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 170μs1.3KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • INSERT INTO `incbmx_session` (`session_id`,`guest`,`time`,`userid`,`username`,`client_id`) VALUES (:session_id, :guest, :time, :user_id, :username, :client_id)140μs944BParams/libraries/src/Session/MetadataManager.php:260Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`48μs656B/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` = :guest74μ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`227μs20.2KBParams/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)206μ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.47ms1.48MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`330μs2.39KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '30583'145μ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)164μs62.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`172μ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)249μs4KBParams/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`168μ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 ASC372μ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`170μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1150μs1.89KB/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)87μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context59μ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)164μs62.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` = 172μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy