imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 19.09.2004, 00:40     # 1
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
MYSQL GROUP BY

Мне нужно то, что спрашивается здесь:
http://www.sql.ru/forum/actualthread...&tid=66341&hl=

Действительно до версии 4.1 этого не реализовать?

А когда версия 4.1 выйдет?

Последний раз редактировалось Neo; 19.09.2004 в 03:01.
Psionic Vision вне форума  
Старый 19.09.2004, 04:58     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Цитата:
А когда версия 4.1 выйдет?
5-ая уже давно вышла (правда пока не релиз)...
RaZEr вне форума  
Старый 19.09.2004, 13:41     # 3
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
вообще если провести нормализацию 4уровня, то эта проблема должна отпасть.

т.е. будет что-то вроде:

userTable(uid, uname)
1 vasya
2 grisha
posTable(pid, ptitle)
1 pos1
2 pos2
3 pos3
user_posTable(uid, pid) <-- псевдо foreign keys(т.к. в мускуле со внешними ключами тоже через одно место, особнно в версии 3.23.x).
1 1
2 1
1 2

select uid from user_posTable where pid = 'pos1'

если надо подцепить данные со связных таблиц, то замечательно через join.
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 19.09.2004, 16:10     # 4
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Цитата:
т.к. в мускуле со внешними ключами тоже через одно место
Здесь подробнее...
RaZEr вне форума  
Старый 19.09.2004, 17:02     # 5
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
RaZEr
Но хостеры версию 4.1 так и не поставили, говорят она в альфа стадии..
Psionic Vision вне форума  
Старый 20.09.2004, 00:33     # 6
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
а чего подробнее? в 3.23.x для этого нужно заводить таблицы, типа innoDB, а это:

1. намного менее производительное решение, особенно на больших таблицах.
2. иногда просто невозможно использовать их из-за хостинга.

и по-моему(но это я точно уже не вспомню), что-то из actions при delete|update не поддерживается в 3.23.x, хотя вот тут не ручаюсь.

p.s. большая таблица, это скажем несколько миллионов записей и несколько сотен мегабайт. попробуй запустить агрегат на такой таблице...
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 20.09.2004, 08:16     # 7
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Цитата:
1. намного менее производительное решение, особенно на больших таблицах.
2. иногда просто невозможно использовать их из-за хостинга.
И что ты предлагаешь?
RaZEr вне форума  
Старый 20.09.2004, 09:59     # 8
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
я ж написал, использовать псевдо-ключи, т.е. взять обработку ключей на себя(прямо в программе).

допустим у нас есть pk - x_id(auto_increment)

во всех остальных таблицах это будет обычное поле x_id, только обрабатывать constrants нужно будет в ручную, т.е. все update|delete и ограничения(запрет дублирования например) нужно будет реализовать в скрипте.

я уже давно так делаю...
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 20.09.2004, 18:22     # 9
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Цитата:
я ж написал, использовать псевдо-ключи, т.е. взять обработку ключей на себя(прямо в программе).
И ты уверен что этот геморой в итоге окажется лучше foreign keys?
RaZEr вне форума  
Старый 21.09.2004, 12:36     # 10
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
ну в принципе каждый выбирает сам. вот пример из сегодняшнего буквально дня:

есть таблицы:

Код:
#
# Структура таблицы `actions`
#

CREATE TABLE actions (
  act_ID int(11) NOT NULL auto_increment,
  act_TITLE varchar(30) NOT NULL default '',
  act_DESC varchar(255) default NULL,
  act_ACTIVE int(11) NOT NULL default '1',
  PRIMARY KEY  (act_ID)
) TYPE=MyISAM PACK_KEYS=0;
# --------------------------------------------------------

#
# Структура таблицы `areas`
#

CREATE TABLE areas (
  ar_ID int(11) NOT NULL auto_increment,
  ar_PATH text NOT NULL,
  ar_DESC varchar(255) default NULL,
  PRIMARY KEY  (ar_ID)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Структура таблицы `areas_actions`
#

CREATE TABLE areas_actions (
  aa_ID int(11) NOT NULL default '0',
  ar_ID int(11) NOT NULL default '0',
  act_ID int(11) NOT NULL default '0',
  PRIMARY KEY  (aa_ID)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Структура таблицы `permissions`
#

CREATE TABLE permissions (
  p_ID int(11) NOT NULL auto_increment,
  usr_ID int(11) NOT NULL default '0',
  aa_ID int(11) NOT NULL default '0',
  PRIMARY KEY  (p_ID)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Структура таблицы `users`
#

CREATE TABLE users (
  usr_ID int(11) NOT NULL auto_increment,
  usr_LOGIN varchar(20) NOT NULL default '',
  usr_PASS varchar(20) NOT NULL default '',
  PRIMARY KEY  (usr_ID)
) TYPE=MyISAM;

как нетрудно догадаться - это обычная авторизация(груп пока нету).

вот тут было бы идеально использовать FK, но к сожалению на хостинге я не могу создавать таблицы InnoDB.

получается настоящий гемор.
приведу пример обновления настроек доступа для пользователя:

Код:
class Permission
{
 .....

function DeleteUserPermissions()
	{
		if (isset($this->userId) && !empty($this->userId))
		{
			$db = new MySql(null,"bd",null,null);
			$db->MySql_Connect();
			$db->MySql_SelectDb();
		
			$selectQuery = "select p.p_ID  
			from permissions as p
			inner join areas_actions as aa
			on p.aa_ID = aa.aa_ID
			inner join actions as act
			on aa.act_ID = act.act_ID
			inner join areas as ar
			on aa.ar_ID = ar.ar_ID
			where usr_ID=" . $this->userId;
			
			//echo $selectQuery;
			
			$db->MySql_QueryDb($selectQuery);
			
			if ($db->dbResult != null)
			{
				while($row = mysql_fetch_assoc($db->dbResult))
				{							
					if ($this->DeletePermissionById($row['p_ID']) !== 0)
					{
						return -1;
					}
				}				
				return 0;
			}	
		}
		return 0;
	}
	function UpdateUserPermissions($areaPath, $actionId)
	{
		if (isset($this->userId) && !empty($this->userId))
		{
			$db = new MySql(null,"bd",null,null);
			$db->MySql_Connect();
			$db->MySql_SelectDb();
				
			$insertQuery = "insert into Permissions 
				(usr_ID, aa_ID)
				SELECT usr.usr_ID, aa.aa_ID
				FROM areas_actions as aa, users as usr 
				inner join areas as ar
				on ar.ar_ID = aa.ar_ID
				inner join actions as act
				on aa.act_ID = act.act_ID
				where ar.ar_PATH = '" . $areaPath . "'
				and act.act_ID = " . $actionId . "
				and usr.usr_ID = " . $this->userId;
			
			$db->MySql_QueryDb($insertQuery);
	
			if (mysql_affected_rows() > 0)
			{
				return 0;
			} 
		}
		return -1;
	}
	function DeletePermissionById($permId)
	{
		$db = new MySql(null,"bd",null,null);
		$db->MySql_Connect();
		$db->MySql_SelectDb();
		
		$deleteQuery = "delete from permissions where p_ID = " 
		. $permId 
		. " limit 1";
		
		$db->MySql_QueryDb($deleteQuery);
		
		if (mysql_affected_rows() > 0)
		{
			return 0;
		}
		return -1;
		
	}
	function Update($userPermissionInfo)
	{
		if ($this->DeleteUserPermissions() !== 0)
		{
			return -1;
		}
		foreach($userPermissionInfo as $area=>$actions)
		{
			foreach($actions as $actionId)
			{
				if ($this->UpdateUserPermissions($area, $actionId) !== 0)
				{
					return -1;
				}
			}
		}
		
		return 0;
	}

 .......

}
схема такая: сначала удаляются все настройки пользователя, а затем обновляются(на основе данных формы).

если бы было каскадное удаление, то достаточно было бы дернуть мастер-таблицу и все.

также нету транзакций.
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 21.09.2004, 17:41     # 11
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Вообще-то я тоже все ключи обрабатываю сам (если это кому-то интересно ), хотя конечнобыло бы приятнее возложить это на БД....
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 20:59.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.