# Exámenes - Amigos

En este examen se debe crear un programa para indicar que una persona es amiga de otra.

Un ejemplo de programa puede probarse en la ventana siguiente (el ejemplo trabaja con una base de datos SQLite):

Enlace a examen Amigos

## Amigos - Tablas

Estas pueden ser las consultas de creación de tablas para este examen:

    // Tamaño de los campos
    define('MAX_REG_TABLA', 20);  // Número máximo de registros en la tabla
    $tamAmigo1 = 80; // Tamaño del campo Amigo1
    $tamAmigo2 = 80; // Tamaño del campo Amigo2

    // Consultas de creación de tabla en MySQL
    $consulta = "CREATE TABLE $dbTabla (
        id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
        amigo1 VARCHAR($tamAmigo1),
        amigo2 VARCHAR($tamAmigo2),
        PRIMARY KEY(id)
        )";

    // Consultas de creación de tablas en SQLite
    $consulta = "CREATE TABLE $dbTabla (
        id INTEGER PRIMARY KEY,
        amigo1 VARCHAR($tamAmigo1),
        amigo2 VARCHAR($tamAmigo2)
    )";

## Amigos - Comentarios

- Añadir registro
  - No se podrá guardar un registro sin dos nombres
  - No se podrán guardar dos registros iguales.
  - Al guardar que Fulanito es amigo de Meganito, guardar también que Menganito es amigo de Fulanito (dos registros).
- Borrar
  - El control utilizado debe ser un botón radio
  - Al borrar un registro, hay que borrar el registro inverso (si se ha elegido que A es amigo de B, hay que borrar que B es amigo de A).
- Listar amigos
  - Para listar los amigos de cada persona, hay que hacer listas anidadas.
  - Para minimizar errores, hay que acordarse de usar variables distintas en cada bucle foreach ($consulta1 / $consulta2, $result1 / $result2, $valor1 / $valor2, etc.):

        // Consulta para sleeccionar los nombres de las personas (sin repeticiones)
        $consulta1 = "SELECT DISTINCT amigo1 FROM $dbTabla
            ORDER BY amigo1 ASC";

        // Consulta para obtener los amigos de una persona
        $consulta2 = "SELECT * FROM $dbTabla
            WHERE amigo1='$valor1[amigo1]'
            ORDER BY amigo2 ASC";

  - Si no se ven correctamente las listas anidadas, al menos que la página escriba las parejas de amigos ordenadas (por amigo 1 y dentro de cada persona por amigo 2).

Esta obra está bajo una licencia de Creative Commons.