Weergegeven resultaten: 1 t/m 9 van 9
  1. #1
    Expert   Dexter's schermafbeelding
    Geregistreerd
    30 January 2008
    Locatie
    België
    Berichten
    692
    Bedankjes
    625
    Bedankt
    636 keer in 343 posts

    [MySQL] Order by werkt niet?

    Ik heb een probleemtje met MySQL en ik vind het probleem niet. :P

    Ik heb een functie:

    Code:
    //Haalt alle categoriën op en returnt een resource in alfabetische volgorde van de naam.    
    function get_all_cats() {
            $query = "SELECT * FROM cats ORDER BY naam ASC";
            $result = mysql_query($query);
            gelukt($result, "De functie get_all_cats() in de functions.php pagina is mislukt.");
            //$result is de resource.
            return $result;
    }
    Met naam, de naam van de kolom in de tabel 'cats' (kort voor categorieën).

    Daarna doe ik dit:
    Code:
                
    <ul>                
        <?php
            $resource_cats = get_all_cats();
            while($row = mysql_fetch_array($resource_cats)) {
                echo "<li><a href=\"view_cat.php?cat=" . $row['id'] . "\">" . $row['naam'] . "</a></li>";
            }
        ?>
    </ul>
    Waarin ik dus een geordende lijst als html-resultaat verwacht. Echter lukt dit niet, ik krijg (met een paar testwaarden) :

    Code:
    Flash
    Java
    Objective C
    Cascading Style Sheets
    HTML
    Photoshop
    PHP & MySQL
    Uncategorized
    Welke niet alfabetisch is. :(


    Iemand een idee waarom dit niet lukt met "ORDER BY" in de query?

    Alvast bedankt,


    Dexter
    HTML(5), CSS(3), Javascript, jQuery, Objective C, Java, AppleScript, PHP, MySQL.

  2. De volgende gebruiker bedankt Dexter voor deze nuttige post:

    ultddave (14 July 2011)

  3. #2
    Expert   Butterflyice's schermafbeelding
    Geregistreerd
    9 June 2006
    Berichten
    738
    Bedankjes
    34
    Bedankt
    636 keer in 410 posts
    wat staat er allemaal in de tabel?
    PHP-code:
    function handleException($e) { echo $e->getMessage(); }
            
    set_exception_handler("handleException");
                throw new 
    Exception("There is always a way");
            echo 
    "You caught me!"

  4. De volgende 2 gebruikers bedanken Butterflyice voor deze nuttige post:

    Dexter (14 July 2011), ultddave (14 July 2011)

  5. #3
    Expert   Dexter's schermafbeelding
    Geregistreerd
    30 January 2008
    Locatie
    België
    Berichten
    692
    Bedankjes
    625
    Bedankt
    636 keer in 343 posts
    Het is een kleine tabel hoor. :P
    Ik heb even een screenshot genomen van phpMyAdmin.




    Dexter
    HTML(5), CSS(3), Javascript, jQuery, Objective C, Java, AppleScript, PHP, MySQL.

  6. De volgende gebruiker bedankt Dexter voor deze nuttige post:

    ultddave (14 July 2011)

  7. #4
    Expert   Butterflyice's schermafbeelding
    Geregistreerd
    9 June 2006
    Berichten
    738
    Bedankjes
    34
    Bedankt
    636 keer in 410 posts
    Als je de tabel naam er bij zet dan zal het beter gaan.
    Code:
    SELECT * FROM cat ORDER BY cat.name ASC
    PHP-code:
    function handleException($e) { echo $e->getMessage(); }
            
    set_exception_handler("handleException");
                throw new 
    Exception("There is always a way");
            echo 
    "You caught me!"

  8. De volgende 2 gebruikers bedanken Butterflyice voor deze nuttige post:

    Dexter (14 July 2011), ultddave (14 July 2011)

  9. #5
    Administrator   ultddave's schermafbeelding
    Geregistreerd
    24 June 2006
    Locatie
    Genk
    Berichten
    1.527
    Bedankjes
    5.389
    Bedankt
    2.577 keer in 1.271 posts
    In de post hierboven moet het 2x "cats" zijn, ipv "cat". Indien het niet zo werken, kan je eens een dump geven van de die tabel. In PHPMyAdmin moet je de tabel selecteren en dan in het menu "exporteren" kiezen.

    Dan kunt ge normaal gezien "SQL" selecteren voor de output, en de rest van de instellingen staat normaal gezien goed, en dan kunt ge gewoon op "start" klikken. Dan krijgt ge zoiets te zien:

    Code:
    CREATE TABLE IF NOT EXISTS `articles` (
      `aid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(150) NOT NULL,
      `content` tinytext NOT NULL,
      `creationdate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `lasteditted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`aid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
    
    --
    -- Gegevens worden uitgevoerd voor tabel `articles`
    --
    
    INSERT INTO `articles` (`aid`, `title`, `content`, `creationdate`, `lasteditted`) VALUES
    (1, 'test', 'test', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (2, ' test', 'test', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (3, 'Hey', 'Hey', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (4, 'Hallo allemaal.\r\n\r\nIk ben david.\r\n\r\n\r\nDag.', 'test', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (5, 'blabla', 'blabla dsf', '2011-07-09 22:25:43', '2011-07-09 22:26:11'),
    (6, 'test', 'test\r<br />\r<br />\r<br />test\r<br />\r<br />\r<br />test\r<br />\r<br />\r<br />\r<br />\r<br />\r<br />test', '2011-07-09 22:43:20', '2011-07-09 22:43:20');
    Die zou ge eens moeten plaatsen hier. Die code kunnen wij dan snel uitvoeren zodat we exact dezelfde tabel hebben, maakt het altijd handiger om te helpen .

    Maar al uw code zou normaal gezien moeten werken, dus tis inderdaad een vreemd probleem.

    Mvg,
    Dave
    "Friendship. It's the hardest thing in the world to explain. It's not something you learn in school. But if you haven't learned the meaning of friendship, you really haven't learned anything." ~ Muhammad Ali

  10. De volgende gebruiker bedankt ultddave voor deze nuttige post:

    Dexter (14 July 2011)

  11. #6
    Expert   Dexter's schermafbeelding
    Geregistreerd
    30 January 2008
    Locatie
    België
    Berichten
    692
    Bedankjes
    625
    Bedankt
    636 keer in 343 posts
    Citaat Oorspronkelijk geplaatst door Butterflyice Bekijk bericht
    Als je de tabel naam er bij zet dan zal het beter gaan.
    Code:
    SELECT * FROM cat ORDER BY cat.name ASC
    Thanks maar dat deed het niet. :P (Wel het veranderde gewoon niet, de code is natuurlijk wel juist)


    @ultddave: Er is denk ik niet echt iets raar aan deze query maar anyway...

    Code:
    -- phpMyAdmin SQL Dump-- version 2.11.7.1
    -- http://www.phpmyadmin.net
    --
    -- Host: localhost
    -- Generatie Tijd: 14 Jul 2011 om 12:44
    -- Server versie: 5.0.41
    -- PHP Versie: 5.2.6
    
    
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    
    
    --
    -- Database: `bookmark`
    --
    
    
    -- --------------------------------------------------------
    
    
    --
    -- Tabel structuur voor tabel `cats`
    --
    
    
    CREATE TABLE IF NOT EXISTS `cats` (
      `naam` varchar(50) NOT NULL,
      `id` int(11) NOT NULL auto_increment,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
    
    
    --
    -- Gegevens worden uitgevoerd voor tabel `cats`
    --
    
    
    INSERT INTO `cats` VALUES('Uncategorized', 1);
    INSERT INTO `cats` VALUES('Photoshop', 2);
    INSERT INTO `cats` VALUES(' Cascading Style Sheets ', 3);
    INSERT INTO `cats` VALUES(' HTML ', 4);
    INSERT INTO `cats` VALUES(' PHP ', 5);
    INSERT INTO `cats` VALUES(' Java ', 6);
    INSERT INTO `cats` VALUES(' Flash ', 7);
    INSERT INTO `cats` VALUES(' Objective C ', 8);
    INSERT INTO `cats` VALUES(' MySQL ', 9);
    INSERT INTO `cats` VALUES(' Python ', 10);
    INSERT INTO `cats` VALUES(' ZZZZZZ ', 11);
    Wat ik wel merkte is dat als ik een naam van een categorie (heb de CRUD voor categorieën al af ) wijzig, bijvoorbeeld een 's' aanplakken zodat het alfabetisch niet uitmaakt, dat hij dan ineens wel naar de goede plaats springt.

    Dus nu heb ik mijn functie naar dit aangepast en bij alle tests die ik heb uitgevoerd (dus gewoon een stuk of 10 categorieën bijgevoegd) werkte deze code (dus de lijst van categorieën wordt alfabetisch gerangschikt).
    Code:
        //Haalt alle categoriën op en returnt een resource in alfabetische volgorde van de naam.
        function get_all_cats() {
            mysql_query("UPDATE cats");
            $query = "SELECT * FROM cats ORDER BY cats.naam ASC";
            $result = mysql_query($query);
            gelukt($result, "De functie get_all_cats() in de functions.php pagina is mislukt.");
            //$result is de resource.
            return $result;
        }

    Van mij mag hier dus wel een slotje op. Bedankt voor de hulp Butterflyice en ultddave.



    Dexter
    HTML(5), CSS(3), Javascript, jQuery, Objective C, Java, AppleScript, PHP, MySQL.

  12. De volgende gebruiker bedankt Dexter voor deze nuttige post:

    ultddave (14 July 2011)

  13. #7
    Administrator   ultddave's schermafbeelding
    Geregistreerd
    24 June 2006
    Locatie
    Genk
    Berichten
    1.527
    Bedankjes
    5.389
    Bedankt
    2.577 keer in 1.271 posts
    Code:
    INSERT INTO `cats` VALUES('Uncategorized', 1);
    INSERT INTO `cats` VALUES('Photoshop', 2);
    INSERT INTO `cats` VALUES(' Cascading Style Sheets ', 3);
    INSERT INTO `cats` VALUES(' HTML ', 4);
    INSERT INTO `cats` VALUES(' PHP ', 5);
    INSERT INTO `cats` VALUES(' Java ', 6);
    INSERT INTO `cats` VALUES(' Flash ', 7);
    INSERT INTO `cats` VALUES(' Objective C ', 8);
    INSERT INTO `cats` VALUES(' MySQL ', 9);
    INSERT INTO `cats` VALUES(' Python ', 10);
    INSERT INTO `cats` VALUES(' ZZZZZZ ', 11);
    Er zijn wel spaties toegevoegd voor (en na) bijna alle categoriën. De eerste 2 bevatten geen spaties. Eventueel kan je daar eens naar kijken (misschien de oorzaak van het probleem). Want spaties worden ook gebruikt als karakter als je alfabetisch gaat sorteren.

    (Bij het inserten desnoods een SQL TRIM uitvoeren op de strings)

    Wat ik wel merkte is dat als ik een naam van een categorie (heb de CRUD voor categorieën al af ) wijzig, bijvoorbeeld een 's' aanplakken zodat het alfabetisch niet uitmaakt, dat hij dan ineens wel naar de goede plaats springt.

    Dus nu heb ik mijn functie naar dit aangepast en bij alle tests die ik heb uitgevoerd (dus gewoon een stuk of 10 categorieën bijgevoegd) werkte deze code (dus de lijst van categorieën wordt alfabetisch gerangschikt).
    Hehe . Opzich vreemd, maar zolang het werkt ^^.

    Mvg,
    Dave
    Laatst gewijzigd door ultddave; 14 July 2011 om 13:17
    "Friendship. It's the hardest thing in the world to explain. It's not something you learn in school. But if you haven't learned the meaning of friendship, you really haven't learned anything." ~ Muhammad Ali

  14. De volgende gebruiker bedankt ultddave voor deze nuttige post:

    Dexter (14 July 2011)

  15. #8
    Expert   Dexter's schermafbeelding
    Geregistreerd
    30 January 2008
    Locatie
    België
    Berichten
    692
    Bedankjes
    625
    Bedankt
    636 keer in 343 posts
    Hmmm ja, ik denk dat dat inderdaad de fout is.
    In mijn query staat inderdaad:
    Code:
    ... ' %s ' ...
    Heb de spaties nu weggelaten.


    Dexter
    HTML(5), CSS(3), Javascript, jQuery, Objective C, Java, AppleScript, PHP, MySQL.

  16. De volgende gebruiker bedankt Dexter voor deze nuttige post:

    ultddave (14 July 2011)

  17. #9
    Expert   Butterflyice's schermafbeelding
    Geregistreerd
    9 June 2006
    Berichten
    738
    Bedankjes
    34
    Bedankt
    636 keer in 410 posts
    oerps foute tabel naam gebruikt hihi
    PHP-code:
    function handleException($e) { echo $e->getMessage(); }
            
    set_exception_handler("handleException");
                throw new 
    Exception("There is always a way");
            echo 
    "You caught me!"

  18. De volgende 2 gebruikers bedanken Butterflyice voor deze nuttige post:

    Dexter (14 July 2011), ultddave (15 July 2011)

Discussie informatie

Users Browsing this Thread

Momenteel bekijken 1 gebruikers deze discussie. (0 leden en 1 gasten)

Favorieten/bladwijzers

Favorieten/bladwijzers

Regels voor berichten

  • Je mag geen nieuwe discussies starten
  • Je mag niet reageren op berichten
  • Je mag geen bijlagen versturen
  • Je mag niet je berichten bewerken
  •