Tag: MySQL

  • Adminer – a lightweight alternative to PhpMyAdmin

    PhpMyAdmin is powerfull but the GUI is messy. Adminer is a lightweight alternative. You have to download the files and place them in your folder.


    # sudo apt-get isntall adminer
    # sudo ln -s /usr/share/adminer/ adminer

    The first line will install the files. They are saved in /usr/share/adminer. Therefore we need a symbolic link to the folder, which is made in the second line of code.

  • SQL count()

    So how do yo find the most popular cake in the Shire Bakery? Here’s an idea.

    PhpMyAdmin: the most popular caske
    PhpMyAdmin: the most popular caske
    -- Show the best cookie
    -- See: Ben Forta Chap. 16
    SELECT COUNT( cakes.cake ) AS 'popular', cakes.cake, costumers.who
    FROM cakes, costumers, likes
    -- sort out the cardinalities (relations)
    WHERE cakes.cakes_id = likes.cakes_id
    AND costumers.costumers_id = likes.costumers_id
    
    -- group by the cake 
    group by cakes.cake
    
    -- and sort (most popular and downwards)
    order by popular desc
    
  • SQL: Many-to-Many and One-to-Many

    Here’s a short tutorial on how to solve some basic SQL cardinalities. First have a look at the ER-diagram for the database and the resulting tables in PhpMyAdmin.

    Many to many and one to many
    Many to many and one to many
    The ER-Diagram transformed to tables in PhpMyAdmin
    The ER-Diagram transformed to tables in PhpMyAdmin

    Many-to-Many

    Many to many cardinalities may be solved like this:


    SELECT cake, who
    FROM cakes, costumers, likes
    WHERE costumers.costumers_id = likes.costumers_id
    AND cakes.cakes_id = likes.cakes_id

    Note that there are two where clauses combined via AND.

    One-to-Many

    This cardinality is more easy:


    SELECT inventory .* , costumers.who
    FROM inventory, costumers
    WHERE inventory.costumers_id = costumers.costumers_id

    In the “many” table you simply connect via the “one” table’s id.

    You can download and try out the samples from my Github Repository oneToMany_ManyToMany.

    Read On

    These samples are inspired by Ben Forta’s “MySQL Crash Course” Ch. 15 – 16.

  • CSS i plugin

    Dokumentationen på Codex er ikke lysende klar; men et plugin gør sådan:

    /* filters etc. */
    add_action('wp_print_styles', 'add_hyperboard_stylesheet');
    
    // (...)
    
    /*Required stylesheets */
    function add_hyperboard_stylesheet() {
    	$myStyleUrl = WP_PLUGIN_URL . '/hyperboard/styles.css';
    	$myStyleFile = WP_PLUGIN_DIR . '/hyperboard/styles.css';
    
            if ( file_exists($myStyleFile) ) {
                wp_register_style('HyperBoardStyleSheets', $myStyleUrl);
                wp_enqueue_style( 'HyperBoardStyleSheets');
            }
    }

    Pluginet sætter en krog i wp_print_styles.

  • Native admin tables i WordPress

    Smashing Magazine (SM) har en artikel om at bruge WPs egen tabel-skaber-klasse til at skabe tabeller. Det giver en spændende funktionalitet. Læs “Create Native Admin Tables in WordPress”.

    Så vidt jeg kan se er artiklen i SM inspireret af dette plugin af Matt van Andel. På sitepoint findes en ganske hæderlig forklaring til udvikling af plugins til WP af R. Nimesh. En tredje mulighed er dette plugin, der både kan lave databasen, tabellerne og shortcodes. Men den får kun tre stjerner, så der er nok en bug eller to i koden.

    WP udviklere kan anvende de originale klasser til at skabe plugins, der i stil og udtryk ligner den originale WP. Som WP udvikler kommer man hurtigt til at arbejde på en måde, der minder om CakePHP frameworket – selv om man dog ikke har en kommandolinje til rådighed.

  • CRUD på vej

    Den primitive CRUD er på vej. Filerne fra phpscaffold kan faktisk ikke anvendes i deres nuværende form. Jeg kan dog til en vis grad bruge SQL-sætningerne og formularerne. Men koden skal i vid udstrækning skrives fra bunden af.

    Til gengæld er WP Codex nem at gå til. Jeg bruger også “Professional WordPress Plugin Development” af Williams et al. (2011).

    Umiddelbart vil jeg udvikle:

    • Adminstrator menuer
    • Præsentation i form af shortcode
    • Præsentation i form af widget til Dashboard
  • Hvorfor ligner mit projekt ikke en vandfaldsmodel?

    Konstaterer, at mit workflow ser nogenlunde sådan ud:

    1) Finde et problem. Spørge brugere. Undersøge.
    2) Tænke over en løsning. Spørge brugere. Undre. Undersøge.
    3) Modeller af workflow -> ER diagrammer
    4) Etablere databasen på grundlag af modeller
    5) PHP / HTML -> CRUD funktionalitet
    6) Design (udvikle CSS)

    Det ser ud til at det egentlige design udvikles til sidst, når jeg har fundet ud af, hvordan produktet skal virke. Måske er mit spørgsmål forkert, for hvis jeg havde besluttet at følge en vandfaldsmodel, så havde projektet taget en anden drejning.

     

  • PHP, Apache, MySQL, Debian

    Har netop konfigureret en LAMP server på et virtuelt Debiansystem i Mac OS X i virtualbox. Gnome skrivebordsmiljøet var for tungt; men LXDE fungerer fint. Jeg regner med at skrive koden i Pico (Nano), MC (Midnight Commander) og Bluefish.

  • Udvikling af Scrum-Kanban

    Her begynder notater til udvikling af en Scrum-Kanban. Formålet med projektet er at udvikle en Kanban, der kan køre som et plugin i WordPress. Dels for at arbejde teoretisk med IT-projektstyring – og dels for at prøve  muligheder med HTML5 og CSS.

    Koden herunder stammer fra W3Schools og den laver den basale funktionalitet; men løsningen er ikke persistent. En persistent løsning bør kunne udvikles via PHP og MySQL. Sprints er:

    1. Gemmefunktion – overfører data til databasen via POST.
    2. Udvikling af ER
    3. PHP
    4. Database
    5. Integration med WordPress API
    <html>
    <head>
    <style type="text/css">
    #div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
    #div2 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
    #div3 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
    .divX  {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
    </style>
    <script>
    function allowDrop(ev)
    {
    ev.preventDefault();
    }
    
    function drag(ev)
    {
    ev.dataTransfer.setData("Text",ev.target.id);
    }
    
    function drop(ev)
    {
    ev.preventDefault();
    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
    }
    </script>
    </head>
    <body>
    
    <p>Drag the W3Schools image into the rectangle:</p>
    <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">Backlog</div>
    
    <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">Todo</div>
    
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">Done</div>
    
    <img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">
    
    <div id="QQ" class="DQ" draggable="true" ondragstart="drag(event)">
     Drag Queen
    </div>
    
    </body>
    </html>
  • At vende grafen i læseretningen

    Det blev lidt kringlet, da grafen:

    1. Skulle vise de seneste 30 resultater
    2. Skulle kunne læses fra venstre mod højre

    I PHP MyAdmin fandt jeg ud af, at SQL-sætningen kunne se omtrent således ud:


    $sql = $wpdb->get_results( "SELECT * FROM `tablename` WHERE name='$username' ORDER BY adate DESC" );

    $sql er sorteret sådan, at grafen ville vende modsat læseretningen, og det er forvirrende. Derfor skulle den kringles sådan:


    $sql = array_reverse($sql, true);

    Og så vender grafen rigtigt.

     

    Peakflow graf
    Nu vender peakflowgrafen rigtigt – dvs. sidste resultat er placeret yderst til højre.
  • Hul igennem fra MySQL til Google Chart Tools

    Hul igennem fra databasen til Googles Graph API
    Hul igennem fra databasen til Googles Graph API

    Så lykkedes det at få hul igennem fra WP MySQL databasen (via klassen $wpdb)  til Googles API.Grafen på billedet herover er lavet med (tilfældige) peakflow-værdier fra min database. Tallene fra databasen er visualiseret i form af en graf.

    Grafen er udviklet via Googles Wizard. Efter at have defineret, hvordan grafen skulle se ud kunne man kopiere en img tag med en meget lang URL.

    Googles URL blev delt op i tre bidder. Første del er de dele af URLen som ligger før tallene fra databasen. Så kommer værdier fra databasen (der er et imploderet array). Til sidst følger den sidste del af Google URLen. Der er selvfølgelig grænser for hvor lang en “GET” streng kan være; men ind til videre er det ikke et problem.

    Brugeren skal være logget på for at kunne se resultaterne; men en demoversion lader sig vel nok fremstille på et tidspunkt. Først ville jeg splitte sagerne op i to funktioner; men det fungerede ikke efter hensigten. Så besluttede jeg at samle hele koden i én funktion i min class – og det virkede så.

    Nu virker den tekniske side af mit plugin, for de øvrige værdier kan findes ved at variere SQL sætningerne og graferne; men den grundlæggende kode er meget ens. Noget helt andet er naturligvis en usabilityanalyse – og designet…

    Der bør nok være en demoside, der viser The Asthma Diary i funktion med en demobruger a la billedet her.

     

Enable Notifications OK No thanks

We use cookies - more information

Multimusen.dk will set a few cookies from Doubleclick, Google and the Social Media plugins they ay set some cookies. Some of my pages use APIs - such as YouTube, LinkedIn, Google Fonts, Google Maps, Mapbox, Spotify, Jetpack, Twitter, Facebook &c.. Such plugins may set the odd cookie.

Close