За последние 24 часа нас посетил 18091 программист и 1599 роботов. Сейчас ищут 917 программистов ...

Помогите плиз!!!!

Тема в разделе "PHP и базы данных", создана пользователем bogdansid, 10 янв 2011.

  1. bogdansid

    bogdansid Активный пользователь

    С нами с:
    10 янв 2011
    Сообщения:
    2
    Симпатии:
    0
    Всем привет!
    У меня есть две таблицы golos и photo.....
    Мне нужно чтобы записи из таблицы photo сортировались по количеству голосов....
    Вот код страницы вывода результатов :
    PHP:
    1.  
    2. <table width="592" border="0" align="center">
    3.   <tr>
    4.     <td><div align="center">
    5.     <h3>Рейтинг</h3>
    6.       <table width="450" border="0" cellspacing="1">
    7.         <?php
    8.  
    9.  
    10.  
    11.   require_once ("config.php");
    12. mysql_query("SET NAMES 'utf8'");
    13.   // Выбираем из базы данных фотографии
    14.   $query = "SELECT * FROM photo ORDER BY id DESC";
    15.   $prt = mysql_query($query);
    16.   if(!$prt)
    17.   {
    18.     echo "error : ".mysql_error()."<br>";
    19.     echo $query;
    20.     puterror("Ошибка при обращении к блоку Фотогалерея");
    21.   }
    22.  
    23. echo'<tr><td bgcolor=#83ABEF>Имя</td><td bgcolor=#83ABEF>голосов</td></tr>';
    24.     while($par = mysql_fetch_array($prt))
    25.     {
    26.    $result = mysql_query("SELECT id_golos FROM golos WHERE id_golos=".$par['id']."");  
    27. $num_rows = mysql_num_rows($result);  
    28.       echo "<tr><td bgcolor=#E0EAFB><a href=reiting.php?id=".$par['id'].">".$par['name']."</a></td><td bgcolor=#E0EAFB><b>".$num_rows."</b></td></tr>";
    29.      
    30.        
    31.     }
    32.  
    33. ?>
    34.       </table>
    35.  

    Вот таблица photo:
    [sql]

    CREATE TABLE IF NOT EXISTS `photo` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` tinytext NOT NULL,
    `img` tinytext NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=16 ;

    --
    -- Dumping data for table `photo`
    --

    INSERT INTO `photo` (`id`, `name`, `img`) VALUES
    (14, 'Книга1', 'files/20110106170046.jpg'),
    (12, 'Книга2', 'files/20110106113315.png'),
    (13, 'книга3', 'files/20110106113325.jpg'),
    (11, 'книга4', 'files/20110106113302.jpg'),
    (10, 'книга5', 'files/20110106113246.jpg'),
    (6, 'книга6', 'files/20110106113047.jpg'),
    (7, 'книга7', 'files/20110106113148.png'),
    (8, 'книга8', 'files/20110106113218.jpg'),
    (9, 'книга9', 'files/20110106113231.jpg'),
    (15, 'книга10', 'files/20110107043024.gif');

    [/sql]

    вот таблица golos:
    [sql]

    CREATE TABLE IF NOT EXISTS `golos` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `id_golos` int(11) NOT NULL,
    `ip` text NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=78 ;

    --
    -- Dumping data for table `golos`
    --

    INSERT INTO `golos` (`id`, `id_golos`, `ip`) VALUES
    (56, 11, '192.168.1.2'),
    (55, 14, '192.168.1.2'),
    (54, 14, '192.168.1.2'),
    (53, 8, '192.168.1.2'),
    (52, 8, '192.168.1.2'),
    (51, 7, '192.168.1.2'),
    (50, 6, '192.168.1.2'),
    (49, 11, '192.168.1.2'),
    (48, 11, '192.168.1.2'),
    (47, 12, '192.168.1.2'),
    (46, 15, '192.168.1.2'),
    (57, 10, '192.168.1.2'),
    (58, 6, '192.168.1.2'),
    (59, 7, '192.168.1.2'),
    (60, 7, '192.168.1.2'),
    (61, 9, '192.168.1.2'),
    (62, 14, '192.168.1.2'),
    (63, 13, '192.168.1.2'),
    (64, 11, '192.168.1.2'),
    (65, 10, '192.168.1.2'),
    (66, 10, '192.168.1.2'),
    (67, 10, '192.168.1.2'),
    (68, 10, '192.168.1.2'),
    (69, 10, '192.168.1.2'),
    (70, 15, '192.168.1.2'),
    (71, 15, '192.168.1.2'),
    (72, 13, '192.168.1.2'),
    (73, 10, '192.168.1.2'),
    (74, 6, '192.168.1.2'),
    (75, 7, '192.168.1.2'),
    (76, 7, '192.168.1.2'),
    (77, 9, '192.168.1.2');


    [/sql]


    Поможете?
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    У вас типичная ошибка новичка, который не удосужился прочитать простейшие советы. Отсюда и проблема с сортировкой.

    Делаем поле votes в таблице photos и делаем этому полю +1 при добавлении голоса. В итоге получаем простейший запрос вида:
    [sql]SELECT * FROM photo ORDER BY votes DESC[/sql]
     
  3. bogdansid

    bogdansid Активный пользователь

    С нами с:
    10 янв 2011
    Сообщения:
    2
    Симпатии:
    0
    Спасибо!
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    держи)))

    [sql]SELECT count( golos.id ) AS summa, photo.img
    FROM photo
    LEFT JOIN golos ON photo.id = golos.id_golos
    GROUP BY golos.id_golos
    ORDER BY summa DESC[/sql]

    Если надо чтобы ip не повторялись - сам допилишь))
     
  5. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    tommyangelo
    GROUP BY плохо, если данных будет много. Его нужно использовать как можно реже.
     
  6. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Psih
    Да, без него тоже корректно.
    Спасибо за замечание