|
|
|
| Всем привет и с праздником ВАС уважаемые! Подскажите пожалуйста как организовать БД чтобы можно было сделать следующее: наример я создаю каталоги - транс,реп,попса и так далее... только еще нужно сделать вывод по алфафиту! каким образом это сделать? дополнительную табличку создать или как? применять enum? как то особо не представляю каким образом! | |
|
|
|
|
|
|
|
для: сотка
(23.02.2012 в 14:20)
| | Вы можете сортировать выборку по разным полям, в том числе и по названию или затруднение в чем-то другом? | |
|
|
|
|
|
|
|
для: cheops
(23.02.2012 в 14:30)
| | Смотрите в чем проблема...например с такой структурой с могу сделать например последние 10 файлов(из всех жанров),если добавлю еще поле с
putdate datetime NOT NULL default '0000-00-00 00:00:00'
|
то смогу делать выборку еще и по времени...могу сделать также по алфавиту сортировку сделать по любому из жанров! А как организовать именно таким образом чтобы например вывести ссылки А-Я и перейдя по каторой выводились именно песни с данной буквы? | |
|
|
|
|
|
|
|
для: сотка
(23.02.2012 в 14:37)
| | Можно задать условие в WHERE, вырезав первую букву при помощи функции SUBSTRING() и сравнивая её с заданной в GET-параметре. | |
|
|
|
|
|
|
|
для: cheops
(23.02.2012 в 17:18)
| | хм...действительно! Спасибо большое! | |
|
|
|
|
|
|
|
для: 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()
//оставляем первую букву например с автора или названия песни
.....
?>
|
| |
|
|
|
|
|
|
|
для: сотка
(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
|
| |
|
|
|
|
|
|
|
для: 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;
|
вот возник вопрос нужно же добавлять поля еще,иначе задуманное не сделать?или что-то не понимаю | |
|
|
|
|
|
|
|
для: cheops
(23.02.2012 в 17:18)
| | для каждой сортировки добавлять новый столбец? правильно? | |
|
|
|
|
|
|
|
для: сотка
(26.02.2012 в 15:50)
| | В таблице вообще столбцы не заводятся, они генерируются в запросе, по мере надобности, так называемые "вычисляемые столбцы". | |
|
|
|
|
|
|
|
для: cheops
(26.02.2012 в 15:58)
| | так ошибку выдает,несуществующий столбец | |
|
|
|
|
|
|
|
для: сотка
(26.02.2012 в 16:02)
| | Ошибку выводит какой запрос? Тот, что приведен в сообщении cheops (26.02.2012 в 13:22)? | |
|
|
|
|
|
|
|
для: 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 поэтому я спросил для каждой сортировки нужен столбец? | |
|
|
|
|
|
|
|
для: сотка
(26.02.2012 в 17:30)
| | Мы назначаем псевдоним при помощи ключевого слова AS
SUBSTRING(name,1,1) AS sort_alfafit
| поэтому в результирующем запросе такой столбец появляется, другое дело, что некоторые конструкции работают не с результирующим запросом, а с исходной таблицей, в них нужно вместо sort_alfafit подставлять SUBSTRING(name,1,1). Т.е. если вам запрос говорит, не вижу такого столбца в такой конструкции, просто подставляйте исходное выражение. | |
|
|
|
|
|
|
|
для: 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);
|
таким образом ? | |
|
|
|
|
|
|
|
для: сотка
(26.02.2012 в 17:46)
| | Да. | |
|
|
|
|
|
|
|
для: 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]."\" >".
| параметр не передается | |
|
|
|
|
|
|
|
для: сотка
(26.02.2012 в 21:55)
| | $cat - дескриптор результирующей таблицы, чтобы извлечь данные нужно задействовать mysql_fetch_array() или какую-то другую функцию для работы с результирующей таблицей. | |
|
|
|
|
|
|
|
для: 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>";
|
не помогает
и с кавычками и без них - эффект один | |
|
|
|
|
|
|
|
для: сотка
(26.02.2012 в 22:20)
| | Выведите дамп массива $soft - в нем данные есть?
PS Кстати, в ссылке вы можете подставлять не $sort['sort_alfafit'], а $_GET[sort_alfafit], что будет правильнее, с точки зрения разграничения данных. | |
|
|
|
|
|
|
|
для: cheops
(26.02.2012 в 22:32)
| |
echo "<pre>";
print_r($sort);
echo "</pre>";
|
ни чего не выводит... | |
|
|
|
|
|
|
|
для: сотка
(26.02.2012 в 22:39)
| | Выведите запрос $query и выполните его в каком-нибудь SQL-клиенте, есть ли в базе данных записи, которые удовлетворяют этому запросу? | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
 4.7 Кб |
|
|
для: сотка
(27.02.2012 в 19:03)
| | посмотрите архив | |
|
|
|
|
|
|
|
для: Valick
(27.02.2012 в 19:49)
| | интересный конечно архив...но в данном случаи требуется вывод совсем другого! (спасибо!) | |
|
|
|
|
|
|
|
для: сотка
(27.02.2012 в 19:54)
| | чего другого? я вам написал таблицы для бд, от которых можно отталкиваться для создания грамотных связей таблиц БД, и вы просили сортировку по полям, я вам показал принцип (один из вариантов)
хотя я бы сортировку полностью оставил для JS | |
|
|
|
|
|
|
|
для: сотка
(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: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;
|
это для позициий для каталогов музыки(жанры) | |
|
|
|
|
|
|
|
для: сотка
(23.02.2012 в 14:31)
| | JS для вап-сайта не серьезно применять там где можно обойтись и без него! | |
|
|
|