Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
ВнизКак можно составить запрос? Найти похожие ветки
← →
No_Dead © (2008-06-20 13:00) [0]Есть таблица
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? Как тогда?
Или (имхо) структура составлена не верно?
← →
Simpson © (2008-06-20 13:01) [1]База какая?
← →
No_Dead © (2008-06-20 13:02) [2]> [1] Simpson © (20.06.08 13:01)
упс)) MySQL
← →
Simpson © (2008-06-20 13:03) [3]`NamePage` varchar(50) NOT NULL default "",
UNIQUE KEY `NamePage` (`NamePage`)
Вот это как между собой стыкуется? У тебя второй запрос по умолчанию не пройдет.
← →
No_Dead © (2008-06-20 13:06) [4]> [3] Simpson © (20.06.08 13:03)
ну, NamePage д.б. не пустым и уникальным. или я неправильно понимаю?
← →
Simpson © (2008-06-20 13:06) [5]IMHO
Если таблица одно то и фиг бы с ней, если несколько как ты их связывать будеш?
Первичный ключ добавь.
А разве запрос
select * from Pages where Help = "YL" не проходит?
← →
Simpson © (2008-06-20 13:08) [6]No_Dead © (20.06.08 13:06) [4]
пустое значение по твоему условию возможно только одно, поле то уникальное. У тебя движок БД должен ругнуться.
← →
No_Dead © (2008-06-20 13:10) [7]> [5] Simpson © (20.06.08 13:06)
проходит. выбираются все записи с "YL".
мне б вот что-то типо этогоSElect * from pages where pages.NamePage=«/index.php» and pages.*="YL"
← →
No_Dead © (2008-06-20 13:12) [8]> [6] Simpson © (20.06.08 13:08)
бд, в частности таблица создавалась в phpMyAdmin. ругательств не было
← →
Sergey13 © (2008-06-20 13:12) [9]> [0] No_Dead © (20.06.08 13:00)
> Можно ли составить запрос что бы выбрались все значения с YL?
select * from Pages where Help = "YL" or viewUser = "YL" or ...
не то?
> Или (имхо) структура составлена не верно?
ИМХО, что бы судить об этом надо знать предметную область задачи для этой таблицы.
← →
No_Dead © (2008-06-20 13:16) [10]> [9] Sergey13 © (20.06.08 13:12)
эта таблица для того, что бы пользователь мог выбрать блоки которые он хочет видить на странице сайта, а какие нет.
К примеру, он может через свой профиль изменить расположение блоков для себя: «News» по умолчанию будет справа, а пользователь может разместить либо слева, либо по центру, либо вообще что бы не отображались.
ну, по крайней мере так в общих чертах мне описали задачу%>
← →
Simpson © (2008-06-20 13:18) [11]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` второе пустое значение ты туда не вставиш, ошибка не синтаксическая, а логическая.
← →
clickmaker © (2008-06-20 13:20) [12]> мне б вот что-то типо этого
> SElect * from pages where pages.NamePage=«/index.php» and
> pages.*="YL"
тут, вроде, напрашивается наоборот: поля YL, YC, ..., а в них - набор Help, viewUser. Ну что-то наподобие битовых флагов
← →
Sergey13 © (2008-06-20 13:21) [13]> [10] No_Dead © (20.06.08 13:16)
Тогда структура не верна.
Нужна дочерняя табличка, в которой будут храниться связки блоки-видимость.
← →
No_Dead © (2008-06-20 13:24) [14]> ты должен четко указать взапросе что с чем ты сравниваеш.
> БД не умеет за тебя определять какие поля будут участвовать
> в запросе.
тогда это будет select * from Pages where NamePage = "/index.php", а потом уже ворожить в скрипте%)
> ограничение на уникальность поля `NamePage` второе пустое
> значение ты туда не вставиш
а вот это как раз и должно быть. т.е. пустых не должно быть.
← →
No_Dead © (2008-06-20 13:28) [15]> [12] clickmaker © (20.06.08 13:20)
хм. а как если YL может соответствовать двум и более блокам?
> [13] Sergey13 © (20.06.08 13:21)
> Тогда структура не верна.
вот и мне тоже так показалось. но думаю, спрашу, подстрахуюсь)
щас помозгую над «дочей»
← →
Simpson © (2008-06-20 13:35) [16]No_Dead © (20.06.08 13:24) [14]
тогда это будет select * from Pages where NamePage = "/index.php", а потом уже ворожить в скрипте%)
Это хорошо если у тебя 10 строк, а если 100 000?
Скрипт не погибнет от использования недозволенной магии?
← →
Simpson © (2008-06-20 13:51) [17]Оперции со строками проходят на порядок дольше чем с целыми. У тебя строковое значение вместо ключа ты бы проиндексировал его что ли, или зделал ключ целым.
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:57) [18]Ты лучше еще раз над структурой подумай, с тем что ты написал ты получиш кучу проблем, жуткие тормоза и вылеты скрипта
← →
No_Dead © (2008-06-20 14:01) [19]> 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.«<br></br>»;
}
медленно будет?
← →
No_Dead © (2008-06-20 14:10) [20]> No_Dead © (20.06.08 14:01)
не то%)
← →
No_Dead © (2008-06-20 14:15) [21][19] то, что надо. (там в условии надо ==, а не =, необедавши глупые ошибки делаю)
вот скорость интересует.
← →
Simpson © (2008-06-20 15:23) [22]конечно медленно, 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-07-15 22:08) [23]итак. во что было сделано
подредактировал таблицу 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 «<TR>\n<TD vAlign=\»top\«>.$rus_name.</TD></TR>
<TR><TD vAlign=\»top\« class=\»tn\«>»;include($loads);
echo «</td></tr>»;
echo «<TR><TD ><IMG height=\»4\« src=\»image/spacer.gif\« width=\»100%\«></TD></TR>»;
}
}
и соответственно вывод уже на страницуforeach($leftcontent as $k=>$v){
$content->load_content($k,$v);
}
вопрос: не будет ли сие тормозить?
← →
No_Dead © (2008-07-15 22:17) [24]немного изменил.
вместо трех запросов(делал для каждой позиции, т.е. для расположения [лево, право, центр]) сделал один$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;
}}
← →
Игорь Шевченко © (2008-07-15 22:19) [25]
> Оперции со строками проходят на порядок дольше чем с целыми
Это только MySQL таким страдает ?
← →
No_Dead © (2008-07-17 10:34) [26]Удалено модератором
Примечание: Создание пустых сообщений
← →
Johnmen © (2008-07-17 11:11) [27]
> No_Dead ©
Ты сайтом не ошибся? Здесь про Delphi.
← →
No_Dead © (2008-07-17 11:15) [28]> [27] Johnmen © (17.07.08 11:11)
:)) так я задавал вопрос в «прочем», а его перенесли в «начинающие»)
← →
brother © (2008-07-17 11:16) [29]>
> :)) так я задавал вопрос в «прочем», а его перенесли в «начинающие»)
а почему не в базы?)))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.049 c