Главная страница
    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.043 c
15-1215111701
oldman
2008-07-03 23:01
2008.08.24
Новости сегодня меня шокировали...


3-1204397912
Kley
2008-03-01 21:58
2008.08.24
Бэкап MSSQL2005


15-1215335704
AndreyRus
2008-07-06 13:15
2008.08.24
Бесплатное хранилище архивов в Интернете.


15-1215495559
Игорь М.
2008-07-08 09:39
2008.08.24
Максимальное число записей в таблице Access ?


6-1192218336
prisoner849
2007-10-12 23:45
2008.08.24
IdHTTP и Post в Indy 10 (BDS 2006)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский