Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Организация базы данных для загруз центра музыки
 
 автор: сотка   (23.02.2012 в 14:20)   письмо автору
 
 

Всем привет и с праздником ВАС уважаемые! Подскажите пожалуйста как организовать БД чтобы можно было сделать следующее: наример я создаю каталоги - транс,реп,попса и так далее... только еще нужно сделать вывод по алфафиту! каким образом это сделать? дополнительную табличку создать или как? применять enum? как то особо не представляю каким образом!

  Ответить  
 
 автор: cheops   (23.02.2012 в 14:30)   письмо автору
 
   для: сотка   (23.02.2012 в 14:20)
 

Вы можете сортировать выборку по разным полям, в том числе и по названию или затруднение в чем-то другом?

  Ответить  
 
 автор: сотка   (23.02.2012 в 14:37)   письмо автору
 
   для: cheops   (23.02.2012 в 14:30)
 

Смотрите в чем проблема...например с такой структурой с могу сделать например последние 10 файлов(из всех жанров),если добавлю еще поле с
putdate datetime NOT NULL default '0000-00-00 00:00:00'

то смогу делать выборку еще и по времени...могу сделать также по алфавиту сортировку сделать по любому из жанров! А как организовать именно таким образом чтобы например вывести ссылки А-Я и перейдя по каторой выводились именно песни с данной буквы?

  Ответить  
 
 автор: cheops   (23.02.2012 в 17:18)   письмо автору
 
   для: сотка   (23.02.2012 в 14:37)
 

Можно задать условие в WHERE, вырезав первую букву при помощи функции SUBSTRING() и сравнивая её с заданной в GET-параметре.

  Ответить  
 
 автор: сотка   (23.02.2012 в 17:52)   письмо автору
 
   для: cheops   (23.02.2012 в 17:18)
 

хм...действительно! Спасибо большое!

  Ответить  
 
 автор: сотка   (26.02.2012 в 12:02)   письмо автору
 
   для: cheops   (23.02.2012 в 17:18)
 

в таблички позиций тогда нужно же создавать дополнительные поля? например мы добавляем поле sort_alfafit и когда этот параметр передан при помощи функции SUBSTRING() вырезаем первую букву и сравниваем? и так для каждо сортировки

<?php
.....
 
// Если GET-параметр sort_alfafit не передан - выводим 
    // список файлов без сорировки
    
if(empty($_GET['sort_alfafit']))
    {
    

      .....
    }
    
    
//Если GET-параметр sort_alfafit  передан - выводим 
    // сортировку по алфавиту 
     
else
    {
       
      
// Выводим выбранную букву
      
$query "SELECT sort_alfafit,
                      
                FROM 
$tbl_mp3_position
                WHERE hide = 'show' AND
                      sort_alfafit = 
$_GET[sort_alfafit]";
     
//тут уже используем ф-цию SUBSTRING() 
     //оставляем первую букву например с автора или названия песни
.....
?>

  Ответить  
 
 автор: cheops   (26.02.2012 в 13:22)   письмо автору
 
   для: сотка   (26.02.2012 в 12:02)
 

У вас уже вероятно есть какое-то имя в таблице $tbl_mp3_position? Можно не вводить новое поле, а вычислить название первой буквы, используя уже имеющееся поле
SELECT
  name,
  SUBSTRING(name,1,1) AS sort_alfafit
FROM
  $tbl_mp3_position 
WHERE
  hide = 'show' AND 
  sort_alfafit = '$_GET[sort_alfafit]'
ORDER BY name

  Ответить  
 
 автор: сотка   (26.02.2012 в 13:34)   письмо автору
 
   для: cheops   (26.02.2012 в 13:22)
 

сейчас она имеет вид
CREATE TABLE system_mp3_position (
  id_position int(11) NOT NULL auto_increment,
  `author` tinytext NOT NULL,
  `name` tinytext NOT NULL,
  big tinytext NOT NULL,
  putdate datetime NOT NULL default '0000-00-00 00:00:00',
  hide enum('show','hide') NOT NULL default 'show',
  pos int(11) NOT NULL default '0',
  id_catalog int(11) NOT NULL default '0',

  PRIMARY KEY  (id_position)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;


вот возник вопрос нужно же добавлять поля еще,иначе задуманное не сделать?или что-то не понимаю

  Ответить  
 
 автор: сотка   (26.02.2012 в 15:50)   письмо автору
 
   для: cheops   (23.02.2012 в 17:18)
 

для каждой сортировки добавлять новый столбец? правильно?

  Ответить  
 
 автор: cheops   (26.02.2012 в 15:58)   письмо автору
 
   для: сотка   (26.02.2012 в 15:50)
 

В таблице вообще столбцы не заводятся, они генерируются в запросе, по мере надобности, так называемые "вычисляемые столбцы".

  Ответить  
 
 автор: сотка   (26.02.2012 в 16:02)   письмо автору
 
   для: cheops   (26.02.2012 в 15:58)
 

так ошибку выдает,несуществующий столбец

  Ответить  
 
 автор: cheops   (26.02.2012 в 17:23)   письмо автору
 
   для: сотка   (26.02.2012 в 16:02)
 

Ошибку выводит какой запрос? Тот, что приведен в сообщении cheops (26.02.2012 в 13:22)?

  Ответить  
 
 автор: сотка   (26.02.2012 в 17:30)   письмо автору
 
   для: cheops   (26.02.2012 в 17:23)
 

Ну конечно же...проблема все таки в правильности таблицы
CREATE TABLE system_mp3_position (
  id_position int(11) NOT NULL auto_increment,
  `author` tinytext NOT NULL,
  `name` tinytext NOT NULL,
  big tinytext NOT NULL,
  putdate datetime NOT NULL default '0000-00-00 00:00:00',
  hide enum('show','hide') NOT NULL default 'show',
  pos int(11) NOT NULL default '0',
  id_catalog int(11) NOT NULL default '0',

  PRIMARY KEY  (id_position)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;


то есть строки нет sort_alfafit поэтому я спросил для каждой сортировки нужен столбец?

  Ответить  
 
 автор: cheops   (26.02.2012 в 17:35)   письмо автору
 
   для: сотка   (26.02.2012 в 17:30)
 

Мы назначаем псевдоним при помощи ключевого слова AS
SUBSTRING(name,1,1) AS sort_alfafit
поэтому в результирующем запросе такой столбец появляется, другое дело, что некоторые конструкции работают не с результирующим запросом, а с исходной таблицей, в них нужно вместо sort_alfafit подставлять SUBSTRING(name,1,1). Т.е. если вам запрос говорит, не вижу такого столбца в такой конструкции, просто подставляйте исходное выражение.

  Ответить  
 
 автор: сотка   (26.02.2012 в 17:46)   письмо автору
 
   для: cheops   (26.02.2012 в 17:35)
 

 $query = "SELECT 
             name, 
SUBSTRING(name,1,1) AS sort_alfafit 
             FROM $tbl_mp3_position  
             WHERE hide = 'show' AND 
SUBSTRING(name,1,1) = '$_GET[sort_alfafit]' 
             ORDER BY name";
 $cat = mysql_query($query);

таким образом ?

  Ответить  
 
 автор: cheops   (26.02.2012 в 17:59)   письмо автору
 
   для: сотка   (26.02.2012 в 17:46)
 

Да.

  Ответить  
 
 автор: сотка   (26.02.2012 в 21:55)   письмо автору
 
   для: cheops   (26.02.2012 в 17:59)
 

 $query = "SELECT 
             name, 
             SUBSTRING(name,1,1) AS sort_alfafit 
             FROM $tbl_new_mp3_position  
             WHERE hide = 'show' AND
            
             SUBSTRING(name,1,1) = '$_GET[sort_alfafit]' 
             ORDER BY name";
 $cat = mysql_query($query);
        if(!$cat)
        {
          throw new ExceptionMySQL(mysql_error(), 
                                   $query,
                                  "Ошибка при извлечении 
                                       текущего раздела");
        }
        
        
           echo"<div class=\"link\"><a href=\"".$_SERVER['PHP_SELF']."?sort_alfafit=".$cat[sort_alfafit]."\" >".
                       А"</a></div>";
      
        

опять где-то не правильно делаю...подскажите?

.$cat[sort_alfafit]."\" >".
параметр не передается

  Ответить  
 
 автор: cheops   (26.02.2012 в 22:14)   письмо автору
 
   для: сотка   (26.02.2012 в 21:55)
 

$cat - дескриптор результирующей таблицы, чтобы извлечь данные нужно задействовать mysql_fetch_array() или какую-то другую функцию для работы с результирующей таблицей.

  Ответить  
 
 автор: сотка   (26.02.2012 в 22:20)   письмо автору
 
   для: cheops   (26.02.2012 в 22:14)
 

     $query = "SELECT 
             name, 
             SUBSTRING(name,1,1) AS sort_alfafit 
             FROM $tbl_new_mp3_position  
             WHERE hide = 'show' AND
            
             SUBSTRING(name,1,1) = '$_GET[sort_alfafit]' 
             ORDER BY name";
 $cat = mysql_query($query);
        if(!$cat)
        {
          throw new ExceptionMySQL(mysql_error(), 
                                   $query,
                                  "Ошибка при извлечении 
                                       текущего раздела");
        }
        $sort = mysql_fetch_array($cat);
         
        
        
           echo"<div class=\"link\"><a href=\"".$_SERVER['PHP_SELF']."?sort_alfafit=".$sort['sort_alfafit']."\" >".
                       А.$total."</a></div>";

не помогает

$sort['sort_alfafit']

и с кавычками и без них - эффект один

  Ответить  
 
 автор: cheops   (26.02.2012 в 22:32)   письмо автору
 
   для: сотка   (26.02.2012 в 22:20)
 

Выведите дамп массива $soft - в нем данные есть?

PS Кстати, в ссылке вы можете подставлять не $sort['sort_alfafit'], а $_GET[sort_alfafit], что будет правильнее, с точки зрения разграничения данных.

  Ответить  
 
 автор: сотка   (26.02.2012 в 22:39)   письмо автору
 
   для: cheops   (26.02.2012 в 22:32)
 

 echo "<pre>"; 
  print_r($sort); 
  echo "</pre>"; 

ни чего не выводит...

  Ответить  
 
 автор: cheops   (27.02.2012 в 00:01)   письмо автору
 
   для: сотка   (26.02.2012 в 22:39)
 

Выведите запрос $query и выполните его в каком-нибудь SQL-клиенте, есть ли в базе данных записи, которые удовлетворяют этому запросу?

  Ответить  
 
 автор: сотка   (27.02.2012 в 19:03)   письмо автору
 
   для: cheops   (27.02.2012 в 00:01)
 

Не понял что именно сделать...в каком SQL-клиенте?

INSERT INTO `system_new_mp3_position` (`id_position`, `author`, `name`, `big`, `putdate`, `hide`, `pos`, `id_catalog`) VALUES
(1, 'максим', 'это же я', 'files/mp3/new/maksimi-ietoizheijai(zvukoff.ru).mp3', '2012-02-25 12:37:00', 'show', 1, 1),
(4, 'елка', 'около тебя', 'files/mp3/new/YOlkai-iOkoloiTebyaiTb6i(WWW.Muzno.RU).mp3', '2012-02-25 12:51:00', 'show', 2, 1)


если делаем так

echo "<pre>";  
  print_r($query);  
  echo "</pre>";


то получаем следующее

SELECT 
             name, 
             SUBSTRING(name,1,1) AS sort_alfafit 
             FROM system_new_mp3_position  
             WHERE hide = 'show' AND
             SUBSTRING(name,1,1) = '' 
             ORDER BY name

  Ответить  
 
 автор: Valick   (27.02.2012 в 19:49)   письмо автору
4.7 Кб
 
   для: сотка   (27.02.2012 в 19:03)
 

посмотрите архив

  Ответить  
 
 автор: сотка   (27.02.2012 в 19:54)   письмо автору
 
   для: Valick   (27.02.2012 в 19:49)
 

интересный конечно архив...но в данном случаи требуется вывод совсем другого! (спасибо!)

  Ответить  
 
 автор: Valick   (27.02.2012 в 20:20)   письмо автору
 
   для: сотка   (27.02.2012 в 19:54)
 

чего другого? я вам написал таблицы для бд, от которых можно отталкиваться для создания грамотных связей таблиц БД, и вы просили сортировку по полям, я вам показал принцип (один из вариантов)
хотя я бы сортировку полностью оставил для JS

  Ответить  
 
 автор: сотка   (23.02.2012 в 14:31)   письмо автору
 
   для: сотка   (23.02.2012 в 14:20)
 

CREATE TABLE system_mp3_catalog (
  id_catalog int(11) NOT NULL auto_increment,
  `name` tinytext NOT NULL,
  pos int(11) NOT NULL default '0',
  hide enum('show','hide') NOT NULL default 'show',
  id_parent int(11) NOT NULL default '0',
  PRIMARY KEY  (id_catalog)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;


так допустим для создания каталогов для жанров музыки

  Ответить  
 
 автор: сотка   (23.02.2012 в 14:32)   письмо автору
 
   для: сотка   (23.02.2012 в 14:31)
 

CREATE TABLE system_mp3_position (
  id_position int(11) NOT NULL auto_increment,
  `name` tinytext NOT NULL,
  big tinytext NOT NULL,
  hide enum('show','hide') NOT NULL default 'show',
  pos int(11) NOT NULL default '0',
  id_catalog int(11) NOT NULL default '0',

  PRIMARY KEY  (id_position)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;

это для позициий для каталогов музыки(жанры)

  Ответить  
 
 автор: сотка   (27.02.2012 в 20:37)   письмо автору
 
   для: сотка   (23.02.2012 в 14:31)
 

JS для вап-сайта не серьезно применять там где можно обойтись и без него!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования