![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как можно составить запрос?
No_Dead © (2008-06-20 13:00:00)Есть таблица
CREATE TABLE `Pages` (
`NamePage` varchar(50) NOT NULL default '',
`LeftAd` char(1) NOT NULL default '',
`CenterAd` char(1) NOT NULL default '',
`RigthAd` char(1) NOT NULL default '',
`Help` enum('YL','YC','YR','N') default 'N',
`viewUser` enum('YL','YC','YR','N') default 'N',
`Opros` enum('YL','YC','YR','N') default 'N',
`News` enum('YL','YC','YR','N') default 'N',
`Menu` enum('YL','YC','YR','N') default 'N',
`Guest` enum('YL','YC','YR','N') default 'N',
UNIQUE KEY `NamePage` (`NamePage`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
и такой строкой
INSERT INTO `Pages` VALUES ('/index.php', '1', '1', '1', 'N', 'YL', 'YL', 'YL', 'N', 'N');
Можно ли составить запрос что бы выбрались все значения с YL? Как тогда?
Или (имхо) структура составлена не верно?
brother (2008-07-17 11:16:00) [1]>
> :)) так я задавал вопрос в «прочем», а его перенесли в «начинающие»)
а почему не в базы?)))
No_Dead (2008-07-17 11:15:00) [2]> [27] Johnmen © (17.07.08 11:11)
:)) так я задавал вопрос в «прочем», а его перенесли в «начинающие»)
Johnmen (2008-07-17 11:11:00) [3]
> No_Dead ©
Ты сайтом не ошибся? Здесь про Delphi.
No_Dead (2008-07-17 10:34:00) [4]Удалено модератором
Примечание: Создание пустых сообщений
Игорь Шевченко (2008-07-15 22:19:00) [5]
> Оперции со строками проходят на порядок дольше чем с целыми
Это только MySQL таким страдает ?
No_Dead (2008-07-15 22:17:00) [6]немного изменил.
вместо трех запросов(делал для каждой позиции, т.е. для расположения [лево, право, центр]) сделал один
$querycontent=«SElECT manager.punkt_put,manager.name_punkt, content.position FROM content,pages,manager where pages.NamePage='».$_SERVER['PHP_SELF'].«' and pages.n_page=content.id_pages and content.id_punkt=manager.id_punkt and content.show='Y'»;
$q_content=mysql_query($querycontent) or die(mysql_error());
while ($rower=mysql_fetch_array($q_content)) {
SWITCH ($rower['position']){
case 'R':
$rigthcontent[$rower['name_punkt']]=$rower['punkt_put'];
break;
case 'C':
$centercontent[$rower['name_punkt']]=$rower['punkt_put'];
break;
case 'L':
$leftcontent[$rower['name_punkt']]=$rower['punkt_put'];
break;
}}
No_Dead (2008-07-15 22:08:00) [7]итак. во что было сделано
подредактировал таблицу pages до вида
CREATE TABLE `Pages` (
`n_page` smallint(6) NOT NULL auto_increment,
`NamePage` varchar(50) NOT NULL default '',
`LeftAd` char(1) NOT NULL default '',
`CenterAd` char(1) NOT NULL default '',
`RigthAd` char(1) NOT NULL default '',
PRIMARY KEY (`n_page`),
UNIQUE KEY `NamePage` (`NamePage`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=19 ;
создал еще две таблицы
CREATE TABLE `manager` (
`id_punkt` smallint(6) NOT NULL auto_increment,
`name_punkt` varchar(20) NOT NULL default '',
`punkt_put` varchar(30) NOT NULL default '',
PRIMARY KEY (`id_punkt`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8 ;
в которой
`name_punkt` имя которое бдет отображаться в заголовке блока
`punkt_put` путь откуда нужно будет инклудить файл
и
CREATE TABLE `content` (
`id_cont` smallint(5) unsigned NOT NULL auto_increment,
`id_pages` smallint(5) unsigned default NULL,
`id_punkt` smallint(5) unsigned default NULL,
`position` enum('L','R','C') default NULL,
`show` enum('Y','N') default NULL,
UNIQUE KEY `id_cont` (`id_cont`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=18 ;
где `id_pages` номер страницы (т.е. Pages.n_page=content.id_pages)
`id_punkt` номер блока (т.е. manager.id_punkt=content.id_punkt)
`position` расположение на странице (слево, справо, по центру)
`show` отображать или нет
затем результат запроса помещаю в массив
$querycontent=«SElECT manager.punkt_put, manager.name_punkt FROM content,pages,manager where pages.NamePage='».$_SERVER['PHP_SELF'].«' and pages.n_page=content.id_pages and content.position='L' and content.id_punkt=manager.id_punkt and content.show='Y'»;
$q_content=mysql_query($querycontent) or die(mysql_error());
while ($rower=mysql_fetch_array($q_content)) {
$leftcontent[$rower['name_punkt']]=$rower['punkt_put'];
}
создал класс для вывода(где $rus_name название блока т.е. manager.name_punkt; и $loads путь к файлу, т.е. manager.punkt_put)
class manager_content{
FUNCTION load_content($rus_name,$loads){
echo «\n.$rus_name.
»;include($loads);
echo «»;
echo «»;
}
}
и соответственно вывод уже на страницу
foreach($leftcontent as $k=>$v){
$content->load_content($k,$v);
}
вопрос: не будет ли сие тормозить?
Simpson (2008-06-20 15:23:00) [8]конечно медленно, 100 000 записей передать с сервака(БД) потом каждую проверить.
Ты лучше напиши условие. Вообще есть книга для начинающих по бд автор Грубер посмотри в инете. Обьем страниц 200 максимум.
include_once(«config.php»);
$query=«select * from Pages where Help = 'YL' or viewUser = 'YL' or ... or `Guest` = 'YL'»;
// вместо ... перечисли поля
$r = mysql_query($query) or die(mysql_error());
$b=(mysql_fetch_array($r));
foreach ($b as $k=>$v){
if ($v == 'YL' and GETTYPE($k)!=«integer»)
echo $k.«++++++++++».$v.«<br></br>»;
}
No_Dead (2008-06-20 14:15:00) [9][19] то, что надо. (там в условии надо ==, а не =, необедавши глупые ошибки делаю)
вот скорость интересует.
No_Dead (2008-06-20 14:10:00) [10]> No_Dead © (20.06.08 14:01)
не то%)
No_Dead (2008-06-20 14:01:00) [11]> Simpson ©
ну вот скриптик такой:
include_once(«config.php»);
$query=«SELECT * FROM pages WHERE NamePage='/index.php'»;
$r = mysql_query($query) or die(mysql_error());
$b=(mysql_fetch_array($r));
foreach ($b as $k=>$v){
if ($v='YL' and GETTYPE($k)!=«integer»)
echo $k.«++++++++++».$v.«
»;
}
медленно будет?
Simpson (2008-06-20 13:57:00) [12]Ты лучше еще раз над структурой подумай, с тем что ты написал ты получиш кучу проблем, жуткие тормоза и вылеты скрипта
Simpson (2008-06-20 13:51:00) [13]Оперции со строками проходят на порядок дольше чем с целыми. У тебя строковое значение вместо ключа ты бы проиндексировал его что ли, или зделал ключ целым.
CREATE TABLE `Pages` (
id integer not null auto_increment,
`NamePage` varchar(50) NOT NULL default '',
`LeftAd` char(1) NOT NULL default '',
`CenterAd` char(1) NOT NULL default '',
`RigthAd` char(1) NOT NULL default '',
`Help` enum('YL','YC','YR','N') default 'N',
`viewUser` enum('YL','YC','YR','N') default 'N',
`Opros` enum('YL','YC','YR','N') default 'N',
`News` enum('YL','YC','YR','N') default 'N',
`Menu` enum('YL','YC','YR','N') default 'N',
`Guest` enum('YL','YC','YR','N') default 'N',
primary key(id),
UNIQUE KEY `NamePage` (`NamePage`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Simpson (2008-06-20 13:35:00) [14]No_Dead © (20.06.08 13:24) [14]
тогда это будет select * from Pages where NamePage = '/index.php', а потом уже ворожить в скрипте%)
Это хорошо если у тебя 10 строк, а если 100 000?
Скрипт не погибнет от использования недозволенной магии?
No_Dead (2008-06-20 13:28:00) [15]> [12] clickmaker © (20.06.08 13:20)
хм. а как если YL может соответствовать двум и более блокам?
> [13] Sergey13 © (20.06.08 13:21)
> Тогда структура не верна.
вот и мне тоже так показалось. но думаю, спрашу, подстрахуюсь)
щас помозгую над «дочей»
No_Dead (2008-06-20 13:24:00) [16]> ты должен четко указать взапросе что с чем ты сравниваеш.
> БД не умеет за тебя определять какие поля будут участвовать
> в запросе.
тогда это будет select * from Pages where NamePage = '/index.php', а потом уже ворожить в скрипте%)
> ограничение на уникальность поля `NamePage` второе пустое
> значение ты туда не вставиш
а вот это как раз и должно быть. т.е. пустых не должно быть.
Sergey13 (2008-06-20 13:21:00) [17]> [10] No_Dead © (20.06.08 13:16)
Тогда структура не верна.
Нужна дочерняя табличка, в которой будут храниться связки блоки-видимость.
clickmaker (2008-06-20 13:20:00) [18]> мне б вот что-то типо этого
> SElect * from pages where pages.NamePage=«/index.php» and
> pages.*='YL'
тут, вроде, напрашивается наоборот: поля YL, YC, ..., а в них - набор Help, viewUser. Ну что-то наподобие битовых флагов
Simpson (2008-06-20 13:18:00) [19]No_Dead © (20.06.08 13:10) [7]
ты должен четко указать взапросе что с чем ты сравниваеш. БД не умеет за тебя определять какие поля будут участвовать в запросе.
например:
Sergey13 © (20.06.08 13:12) [9]
select * from Pages where Help = 'YL' or viewUser = 'YL' or ...
No_Dead © (20.06.08 13:12) [8]
Синтаксически таблица составлена правильно, но у тебя ограничение на уникальность поля `NamePage` второе пустое значение ты туда не вставиш, ошибка не синтаксическая, а логическая.
No_Dead (2008-06-20 13:16:00) [20]> [9] Sergey13 © (20.06.08 13:12)
эта таблица для того, что бы пользователь мог выбрать блоки которые он хочет видить на странице сайта, а какие нет.
К примеру, он может через свой профиль изменить расположение блоков для себя: «News» по умолчанию будет справа, а пользователь может разместить либо слева, либо по центру, либо вообще что бы не отображались.
ну, по крайней мере так в общих чертах мне описали задачу%>