которое может принимать 8 разных значений при этом мне нужно вывести это все в таблицу чтоб по каждому значению создавалась отдельная таблица типа
Управляющие
-------
------
------
Помошники
------
------
-------
ну и т.д
Можно ли как то осуществить это не используя для каждой группы новый запрос ?
А то их в итоге получится 8 штук (что как я думаю есть не очень хорошо из-за нагрузки)
Спустя 30 минут, 26 секунд (14.07.2010 - 15:35) vagrand написал(а):
Выбирай всех одним запросом а потом просто данные в цикле группируй
Спустя 6 минут, 1 секунда (14.07.2010 - 15:41) sergeiss написал(а):
Цитата (vagrand @ 14.07.2010 - 16:35) |
а потом просто данные в цикле группируй |
Опять "группируй в ПХП"... А нафига группировки в БД сделаны, как ты думаешь?
blade - покажи структуру таблиц, тогда проще будет ответить на твой вопрос. Да и твои соображения по этому поводу тоже не помешают

Спустя 37 минут, 56 секунд (14.07.2010 - 16:19) vagrand написал(а):
Цитата |
А нафига группировки в БД сделаны, как ты думаешь? |
А ты не фигуй тут. А почитай внимательно пост автора. А если такой умный то давай ко расскажи мне как бы ты вывел нужную структуру одним запросом без php группировки.
Спустя 3 минуты, 3 секунды (14.07.2010 - 16:22) sergeiss написал(а):
Цитата (vagrand @ 14.07.2010 - 17:19) |
А ты не фигуй тут. |
Ишь ты, обидчивый какой

Цитата (vagrand @ 14.07.2010 - 17:19) |
А если такой умный то давай ко расскажи мне как бы ты вывел нужную структуру одним запросом без php группировки. |
Про GROUP BY в БД слышал, читал? Вот это и надо использовать! Для того оно и создано!!!
А чтобы ТС дать более-менее правильный ответ, надо знать структуру таблиц.
Спустя 21 минута, 9 секунд (14.07.2010 - 16:43) vagrand написал(а):
Цитата |
Про GROUP BY в БД слышал, читал? Вот это и надо использовать! Для того оно и создано!!! |
Да что ты говоришь. Ну ка приведи мне примерчик.
Если у тебя есть таблица юзеров разделенных на группы. Выведи как их одним запросом разбитых по группам при помощи GROUP BY. Если выйдет я буду тебе стоя аплодировать.
P.S. Мы еще за массив объектов с тобой не договорили
Спустя 5 минут, 21 секунда (14.07.2010 - 16:48) sergeiss написал(а):
Цитата (vagrand @ 14.07.2010 - 17:43) |
Выведи как их одним запросом разбитых по группам при помощи GROUP BY |
Еще раз повторю: надо знать структуру таблиц


Но только я сразу уточняю - я буду в Постгре запрос делать, возможно, что с использованием его некоторых специфических "фенечек". И GROUP BY там тоже будет, без него никак. ОК?
Ишшо и не такое одним запросом делаю

Спустя 2 минуты, 11 секунд (14.07.2010 - 16:50) vagrand написал(а):
Цитата |
Но только я сразу уточняю - я буду в Постгре запрос делать, возможно, что с использованием его некоторых специфических "фенечек". И GROUP BY там тоже будет, без него никак. ОК? |
Нет, не ок. Я говорю про MySQL
Спустя 10 минут, 36 секунд (14.07.2010 - 17:01) sergeiss написал(а):
Скорее всего, запрос получится "кроссБДэшный"
Только надо все-таки со структурой таблиц определиться. Не хочу строить никаких предположений по этому поводу.

Спустя 1 час, 12 минут, 43 секунды (14.07.2010 - 18:14) Ice написал(а):
вариант? 

<?php
$employees = array();
$query = 'select name, stat from `names` order by stat';
$q = mysql_query( $query );
while($fetch = mysql_fetch_assoc( $q ) ) {
settype( $employees[ $fetch['stat'] ], 'array');
$employees[ $fetch['stat'] ][] = $fetch['name'];
}
?>
<html>
<head></head>
<body>
<?php foreach( $employees as $stat=>$names ):?>
<h3><?php echo $stat ?></h3>
<?php foreach( $names as $name ):?>
<dd><?php echo $name ?></dd>
<?php endforeach ?>
<?php endforeach ?>
</body>
</html>
Спустя 11 минут, 21 секунда (14.07.2010 - 18:25) Michael написал(а):
Цитата (Ice @ 14.07.2010 - 17:14) |
вариант? ![]() |
+++
только и второго цикла можно бы избежать если порядок не важен - они и так отсортированы будут.
Спустя 25 минут, 46 секунд (14.07.2010 - 18:51) sergeiss написал(а):
Нет уж!
Давайт подождем автора темы, пусть он скажет, какая структура таблиц тут.

Спустя 3 минуты, 29 секунд (14.07.2010 - 18:54) Michael написал(а):
Цитата (sergeiss @ 14.07.2010 - 17:51) |
Нет уж! ![]() |
помоему Ice уже решил этот пазл.

Спустя 3 минуты, 25 секунд (14.07.2010 - 18:58) sergeiss написал(а):
Да тут проблемы не было никакой
Но мне хотелось сначала услышать автора темы.

Спустя 9 минут, 4 секунды (14.07.2010 - 19:07) Ice написал(а):
Скрипт с двумя форичами выполняется 10 тысяч раз за 15-18 мс при 7 пользователях. Может кто сможет быстрее

Спустя 2 часа, 25 минут, 12 секунд (14.07.2010 - 21:32) blade написал(а):
Структура таблицы
Мысль по выводу только одна - Для каждой группы свой запрос
--
-- Структура таблицы `user`
--
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
`email` text NOT NULL,
`user_status` varchar(10) NOT NULL default 'user',
`podpis` text NOT NULL,
`avatars` varchar(50) NOT NULL default 'useravatars/netavbl.png',
`ipadress` varchar(15) NOT NULL,
`regdate` varchar(20) NOT NULL,
`team` varchar(50) NOT NULL default 'Пользователь',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;
Мысль по выводу только одна - Для каждой группы свой запрос
Спустя 1 минута, 30 секунд (14.07.2010 - 21:33) Ice написал(а):
Вы не хешируете пароль, занося в БД?
Мой вариант вывода не подходит?
Мой вариант вывода не подходит?
Спустя 5 минут, 58 секунд (14.07.2010 - 21:39) blade написал(а):
Цитата (Ice @ 14.07.2010 - 18:33) |
Вы не хешируете пароль, занося в БД? Мой вариант вывода не подходит? |
1) Всысле ? (насчет пароля)
2) Сейчас пробую вроде то но сказать точно смогу немного поже
Спустя 4 минуты, 22 секунды (14.07.2010 - 21:44) Ice написал(а):
1. Смущает размер поля в 20 символов
2. Выведет так:
2. Выведет так:
админ
Федя
Маша
Глаша
супермодер
Петя
Жанна
модер
Вася
Спустя 4 минуты, 42 секунды (14.07.2010 - 21:49) blade написал(а):
Цитата (Ice @ 14.07.2010 - 18:44) |
1. Смущает размер поля в 20 символов 2. Выведет так:
|
ну пароль у каждого свой я допустим пользуюсь паролем в котором 14 символов.
да то что вывело уже видел. спасибо, но хотелось бы услышать еще соображения по выводу данных ,если таковы имеются
Спустя 5 минут, 40 секунд (14.07.2010 - 21:54) Ice написал(а):
sergeiss хочеть что-то предложить. У него есть идеи 
Так вот, хранить открытые пароли в БД противоречит требованиям конфиденциальности и безопасности. А смутило меня потому, что размер даже самого архисложного, но захешированного, скажем, алгоритмом md5, пароля составляет 32 символа.

Так вот, хранить открытые пароли в БД противоречит требованиям конфиденциальности и безопасности. А смутило меня потому, что размер даже самого архисложного, но захешированного, скажем, алгоритмом md5, пароля составляет 32 символа.
Спустя 3 минуты, 51 секунда (14.07.2010 - 21:58) blade написал(а):
Цитата (Ice @ 14.07.2010 - 18:54) |
sergeiss хочеть что-то предложить. У него есть идеи ![]() Так вот, хранить открытые пароли в БД противоречит требованиям конфиденциальности и безопасности. А смутило меня потому, что размер даже самого архисложного, но захешированного, скажем, алгоритмом md5, пароля составляет 32 символа. |
спасибо за подсказку значит сейчас усядусь переделывать систему регистрации и входа в систему , чтоб пароль был хеширован и использую лучше md5 ))
Спустя 3 минуты, 27 секунд (14.07.2010 - 22:01) Ice написал(а):
да каким угодно захешируйте (только не собственного производства). А то он вообще открытый пока что:)
Спустя 11 часов, 22 минуты, 47 секунд (15.07.2010 - 09:24) blade написал(а):
Цитата (Ice @ 14.07.2010 - 19:01) |
да каким угодно захешируйте (только не собственного производства). А то он вообще открытый пока что:) |
проверил вывод, но к сожалению такой способ не подходит
Спустя 13 минут, 23 секунды (15.07.2010 - 09:38) sergeiss написал(а):
Цитата (blade @ 15.07.2010 - 10:24) |
проверил вывод, но к сожалению такой способ не подходит |
А как именно ты хочешь вывести, в таком случае? Исходить надо из того, что нужно в итоге, а не перебирать всевозможные варианты вывода данных.
Спустя 21 минута, 19 секунд (15.07.2010 - 09:59) blade написал(а):
Цитата (sergeiss @ 15.07.2010 - 06:38) | ||
А как именно ты хочешь вывести, в таком случае? Исходить надо из того, что нужно в итоге, а не перебирать всевозможные варианты вывода данных. |
вот такие должны быть по задумке таблицы для каждой группы в которых идет сортировка по рейтингу

Спустя 28 минут, 6 секунд (15.07.2010 - 10:27) sergeiss написал(а):
И..... В чем проблема?
Изначальный вопрос ставился так: "Можно ли как то осуществить это не используя для каждой группы новый запрос ?" Ответ: да, можно.
Тебе уже Ice написал запрос. Проще тут просто некуда уже
Если нужно, добавь в него поля логин, рейтинг, репутация, дата регистрации. Можно добавить еще сортировку по, например, логину. Или по рейтингу. Или по любому другому полю
При выводе данных тебе не нужно ничего "группировать"! Потому что записи уже будут сгруппированы по признаку "stat".
Тебе достаточно только анализировать это поле. В начале выборки начинаешь новую таблицу. Выводишь данные. Как только stat изменилось (или закончилась выборка), закрываешь таблицу. Если данные еще есть, то открываешь новую таблицу... И так до тех пор, пока не закончатся все данные.
Алгоритм - проще некуда.
Или я не понял, в чем проблема, что именно ты не можешь понять? У тебя вопрос, по-моему, сводится не к тому, как сделать выборку, а больше к тому, как вывести выбранные данные.
Изначальный вопрос ставился так: "Можно ли как то осуществить это не используя для каждой группы новый запрос ?" Ответ: да, можно.
Тебе уже Ice написал запрос. Проще тут просто некуда уже

$query = 'select name, stat from `names` order by stat';
Если нужно, добавь в него поля логин, рейтинг, репутация, дата регистрации. Можно добавить еще сортировку по, например, логину. Или по рейтингу. Или по любому другому полю

При выводе данных тебе не нужно ничего "группировать"! Потому что записи уже будут сгруппированы по признаку "stat".
Тебе достаточно только анализировать это поле. В начале выборки начинаешь новую таблицу. Выводишь данные. Как только stat изменилось (или закончилась выборка), закрываешь таблицу. Если данные еще есть, то открываешь новую таблицу... И так до тех пор, пока не закончатся все данные.
Алгоритм - проще некуда.
Или я не понял, в чем проблема, что именно ты не можешь понять? У тебя вопрос, по-моему, сводится не к тому, как сделать выборку, а больше к тому, как вывести выбранные данные.
Спустя 4 минуты, 11 секунд (15.07.2010 - 10:31) blade написал(а):
да как вывести! немогу использовать таблицу с кодом Ice
Спустя 1 минута, 29 секунд (15.07.2010 - 10:33) sergeiss написал(а):
ОК, давай по порядку.
Цитата (blade @ 15.07.2010 - 11:31) |
немогу использовать таблицу с кодом Ice |
А как именно ты пробовал? Код покажи свой для начала.
Спустя 16 минут, 44 секунды (15.07.2010 - 10:49) blade написал(а):
вот
а как сделать сортировку и вынести другие данные ?
<?php
$employees = array();
$query = 'select username, user_status from `user` order by user_status';
$q = mysql_query( $query );
while($fetch = mysql_fetch_assoc( $q ) ) {
settype( $employees[ $fetch['user_status'] ], 'array');
$employees[ $fetch['user_status'] ][] = $fetch['username'];
}
?>
<?php foreach( $employees as $stat=>$names ):?>
<table border="0" width="98%" align="center" cellpadding="0" cellspacing="0">
<tr style="background:#DAE1E8;" align="center" height="30px">
<td style="padding:4px; font-weight:bold;">Группа <?php echo $stat ?></td>
</tr>
<?php foreach( $names as $name ):?>
<dd><tr><td><?php echo $name ?></td></tr></dd>
<?php endforeach ?>
<?php endforeach ?>
</table>
а как сделать сортировку и вынести другие данные ?
Спустя 23 минуты, 2 секунды (15.07.2010 - 11:12) sergeiss написал(а):
Ну так... Ты практически всё написал уже
Точнее говоря, ты сможешь самостоятельно переделать код, я только алгоритм опишу.
1. Вынести другие данные. Сначала добавь их в запрос, названия всех нужных тебе столбцов.
2. Сделать сортировку. А она у тебя уже сделана!!! В запросе есть order by. Можешь добавить туда же другую колонку, тогда будет сортировка по еще одному столбцу, уже внутри статуса. Например
Тебе надо сразу же внутри цикла while делать вывод, безо всяких дополнительных циклов. Т.е. всякие foreach'и не нужны.
Типа такого:

1. Вынести другие данные. Сначала добавь их в запрос, названия всех нужных тебе столбцов.
2. Сделать сортировку. А она у тебя уже сделана!!! В запросе есть order by. Можешь добавить туда же другую колонку, тогда будет сортировка по еще одному столбцу, уже внутри статуса. Например
... order by user_status, login
Тебе надо сразу же внутри цикла while делать вывод, безо всяких дополнительных циклов. Т.е. всякие foreach'и не нужны.
Типа такого:
$curr_status='';
$table_started=false;
while( $fetch = mysql_fetch_assoc( $q ) )
{
// как только статус сменился, начинаем новую таблицу;
// код работает и в случае самого начала данных, для первой строки
if( $fetch['user_status'] != $curr_status )
{
$curr_status=$fetch['user_status'];
if( $table_started )// если таблица уже была начата
{
// тут пишешь код закрытия текущей таблицы
}
....// тут пишешь код начала таблицы
.....
$table_started=true; // и про это надо не забытьэтот статус уже не изменится до конца цикла while
}
// а тут пишешь код вывода текущей информации в таблицу
} // конец цикла while
if( $table_started )
{
// закрываем последнюю таблицу, если вообще они были начаты
}
Спустя 25 минут, 22 секунды (15.07.2010 - 11:38) blade написал(а):
Цитата (sergeiss @ 15.07.2010 - 08:12) |
Ну так... Ты практически всё написал уже ![]() 1. Вынести другие данные. Сначала добавь их в запрос, названия всех нужных тебе столбцов. 2. Сделать сортировку. А она у тебя уже сделана!!! В запросе есть order by. Можешь добавить туда же другую колонку, тогда будет сортировка по еще одному столбцу, уже внутри статуса. Например ... order by user_status, login Тебе надо сразу же внутри цикла while делать вывод, безо всяких дополнительных циклов. Т.е. всякие foreach'и не нужны. Типа такого: $curr_status=''; |
спасибо вроде то что нужно