Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.&laquo;++++++++++&raquo;.$v.&laquo;<br></br>&raquo;;
}


медленно будет?


 
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` &#151; имя которое бдет отображаться в заголовке блока
`punkt_put` &#151; путь откуда нужно будет инклудить файл

и

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` &#151; номер страницы (т.е. Pages.n_page=content.id_pages)
`id_punkt` &#151; номер блока (т.е. manager.id_punkt=content.id_punkt)
`position` &#151; расположение на странице (слево, справо, по центру)
`show` &#151; отображать или нет

затем результат запроса помещаю в массив
$querycontent=&laquo;SElECT manager.punkt_put, manager.name_punkt FROM content,pages,manager where pages.NamePage="&raquo;.$_SERVER["PHP_SELF"].&laquo;" and pages.n_page=content.id_pages and content.position="L" and content.id_punkt=manager.id_punkt and content.show="Y"&raquo;;
$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 &laquo;<TR>\n<TD vAlign=\&raquo;top\&laquo;>.$rus_name.</TD></TR>
<TR><TD vAlign=\&raquo;top\&laquo; class=\&raquo;tn\&laquo;>&raquo;;include($loads);
echo &laquo;</td></tr>&raquo;;
echo &laquo;<TR><TD ><IMG height=\&raquo;4\&laquo; src=\&raquo;image/spacer.gif\&laquo; width=\&raquo;100%\&laquo;></TD></TR>&raquo;;
}
}


и соответственно вывод уже на страницу
foreach($leftcontent as $k=>$v){
$content->load_content($k,$v);
}


вопрос: не будет ли сие тормозить?


 
No_Dead ©   (2008-07-15 22:17) [24]

немного изменил.
вместо трех запросов(делал для каждой позиции, т.е. для расположения [лево, право, центр]) сделал один
$querycontent=&laquo;SElECT manager.punkt_put,manager.name_punkt, content.position FROM content,pages,manager where pages.NamePage="&raquo;.$_SERVER["PHP_SELF"].&laquo;" and pages.n_page=content.id_pages and content.id_punkt=manager.id_punkt and content.show="Y"&raquo;;
$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)

:)) так я задавал вопрос в &laquo;прочем&raquo;, а его перенесли в &laquo;начинающие&raquo;)


 
brother ©   (2008-07-17 11:16) [29]

>
> :)) так я задавал вопрос в «прочем», а его перенесли в «начинающие»)

а почему не в базы?)))



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.049 c
2-1216046956
Vikindos
2008-07-14 18:49
2008.08.24
Замена слов в массиве


2-1216324121
alexda
2008-07-17 23:48
2008.08.24
Socket Error


6-1192557976
Rembo
2007-10-16 22:06
2008.08.24
TIdIcmpClient количество посланных байт


15-1215552225
antonn
2008-07-09 01:23
2008.08.24
Еще одна просьба провести тест


15-1215161784
гпрс
2008-07-04 12:56
2008.08.24
автодозвон





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский