Групирование данных из MySql

tolst

Новичок
Групирование данных из MySql

В общем есть таблица:
---------------------------
| id | group_id | name |
---------------------------

Задача:
Вывести в HTML данные вот такого вида:
<tr><td>group_id</td><td>Перечень всех id этой group_id</td></tr>

как это сделать наиболее корректно?
 

tolst

Новичок
Ну блин, сделать то я сделал, я не уверен что мой вариант оптимален, мне даже стыдно код выкладывать, ну да лано, выложу:

PHP:
$sql = mysql_query("SELECT group_id FROM menu");
for ($i = 0; $i < mysql_num_rows($sql); $i++){
	if ($mfa = mysql_fetch_array($sql)){
		$groups[] = $mfa[group_id];
	}
}
$groups = array_unique($groups);

for ($i = 0; $i < count($groups); $i++){
	$sql_1 = mysql_query("SELECT * FROM menu WHERE group_id = '" . $groups[$i] . "'");
		for ($z = 0; $z < mysql_num_rows($sql_1); $z++){
			if ($mfa_z = mysql_fetch_array($sql_1)){

// тут формирование списка id
}
// тут формирование <tr></tr>...
}
.......
 

diamond_krnl

pure-php
PHP:
$ret = array();
while($row = mysql_fetch_assoc($res))
{
  $ret[$row['group_id']][$row['id']] = $row['name'];
}
так более удобно работать, IMHO.
 

tolst

Новичок
я уже привык работать так как работаю :) если бы ты сказал бы не "удобнее", а "оптимальнее", я бы задумался
 

Фанат

oncle terrible
Команда форума
и не лень тебе всю эту требуху писать с закорючками?

-~{}~ 12.04.05 10:16:

кстати, вместо
$sql = mysql_query("SELECT group_id FROM menu");
удобнее писать либо
$query="SELECT group_id FROM menu";
$sql = mysql_query($query);
либо
$sql = wrapper("SELECT group_id FROM menu");
но не так, как ты пишешь

-~{}~ 12.04.05 10:23:

вообще, забавно.
даже забавнее, чем показалось на первый взгляд
чувак пишет абсолютно лишний оператор, абсолютно.
и при этом заявляет, что ему так удобнее.

было бы не так смешно, если бы не его
if ($mfa = mysql_fetch_array($sql)){

в которой слово иф заменяется на слово вайл, и в результате фор просто выкидывается из текста.
но ему так удобнее.
 

Фанат

oncle terrible
Команда форума
потому, что ошибки надо самостоятельно искать, а не на форум бегать
 

tolst

Новичок
> Да хотя бы для отладки.
Разници вообще нет, мне без разници где править SQL, в переменной или в значении функции...

> было бы не так смешно, если бы не его
> if ($mfa = mysql_fetch_array($sql)){

Я знаю что if не обязателен, можно сразу писать
PHP:
$mfa = mysql_fetch_array($sql)
Мне так удобнее!!! вопрос был не этот, вопрос был как организовать более оптимально алгоритм а не синтаксис...
 

Фанат

oncle terrible
Команда форума
мне без разници где править
А никто не говорит про правку. говорят тебе про отладку. Читать научись.
Я знаю что if не обязателен,
но он у тебя стоит. и получается, что фор в таком раскладе не нужен совершенно. это-то и смешно, а ты выглядишь бараном
вопрос был не этот, вопрос был как организовать более оптимально алгоритм а не синтаксис...
какой смысл тебе что-то писать, если ты заявишь в ответ - "мне так удобнее!". зачем своё время тратить?
 

tolst

Новичок
> А никто не говорит про правку. говорят тебе про отладку. Читать научись.
Не в тему вообще... какая в попу может быть отладка и какая вообще может быть разница?...

> но он у тебя стоит. и получается, что фор в таком раскладе не нужен совершенно. это-то и смешно, а ты выглядишь бараном
В моих глазах сейчас ты выглядеш бараном, я же не высказываю своё мнение!!! мне так удобнее, я так делаю...

> какой смысл тебе что-то писать, если ты заявишь в ответ - "мне так удобнее!". зачем своё время тратить?
Я прошу подсказать алгоритм а не учить меня синтаксису...
 

Фанат

oncle terrible
Команда форума
Не в тему вообще... какая в попу может быть отладка и какая вообще может быть разница?...
тебе всё равно не понять =)
мне так удобнее, я так делаю...
ты путаешь.
не "удобнее", а "я упёрся, как баран".
Я прошу подсказать алгоритм
это слжный алгоритм.
не для средних умов. тебе не понять
 

tolst

Новичок
Фанат
эй умник, иннНАААХ с этого топика... понял да...
нелезь раз не знаеш ответа... тугодум
PS. Докапываться только и умееш... по уму обьяснять нефика... ты видиш чужие косяки, а своих не замечаеш...
 

Domovoj

Guest
Автор оригинала: Tor
это почему же?
Да, в самом деле, зачем лишняя строка? Для отладки? А чем не подходит $sql = mysql_query($query='SELECT....') для отладки (раз уж в других сообщениях идёт речь об удалении лишних строк)?

А насчёт лишнего if зачем же сразу сразу бараном ругать. Видете же, человек - новичок и многих фишек не знает. Он просит совета а вы его хамите. Нет чтобы объяснить по-человечески.

Слушай сюда, чего они тебе хотели сказать:

Вот это:

PHP:
for ($i = 0; $i < mysql_num_rows($sql); $i++){ 
    if ($mfa = mysql_fetch_array($sql)){ 
        $groups[] = $mfa[group_id]; 
    } 
}
можно без проблем заменить на:

PHP:
while ($mfa = mysql_fetch_array($sql)) {
      $groups[] = $mfa["group_id"];
}
И короче, и читабельнее, и быстрее.

+ "mysql_num_rows" не вызывается в каждой итерации.

Кстати, не пиши $mfa[group_id] - замучаешься искать потом ошибку, если случайно константу такую создашь (+ лог ошибок забиваешь фигнёй).
 

tolst

Новичок
Domovoj
Пасиба что потдержал...
Я как бы и не совсем новичёк, 4.5 года уже програмлю :)
Синтаксис я умею правильно проставлять, просто мне так удобнее, не то чтобы удобнее, я привык с так делать с тех времён кода ещё учился :)

PHP:
while ($mfa = mysql_fetch_array($sql)) { 
      $groups[] = $mfa["group_id"]; 
}
Данный вариант действительно оптимальнее, согласен...
 

Фанат

oncle terrible
Команда форума
Domovoj
А чем не подходит $sql = mysql_query для отладки
тем, что оно не подходит для отладки.
читай PHP FAQ: Ничего не работает! Что делать??? - там всё написано.
раз уж в других сообщениях идёт речь об удалении лишних строк
в других сообщениях идёт речь об удалении БЕССМЫСЛЕННЫХ строк.
зачем же сразу сразу бараном ругать. Видете же, человек - новичок
бараном его ругают не сразу и не за то, что он новичок.
он прекрасно понимает, что ему говорят.
 

Domovoj

Guest
Re: Групирование данных из MySql

Автор оригинала: tolst
В общем есть таблица:
---------------------------
| id | group_id | name |
---------------------------

Задача:
Вывести в HTML данные вот такого вида:
<tr><td>group_id</td><td>Перечень всех id этой group_id</td></tr>

как это сделать наиболее корректно?
PHP:
$rs = mysql_query('SELECT * FROM menu');

while ($row = mysql_fetch_array($rs)) {
    $result[$rs['group_id']]['name'] = $row['name'];
    $result[$rs['group_id']]['id'][] = $row['id'];
}
всё. Теперь выводишь, что тебе нужно:

PHP:
foreach ($result as $group_id => $data) {
$ids = join(', ', $data['id']);
?>
<tr><td><?=$group_id?></td><td><?=$ids?></td></tr>
<?
}
Вроде бы так, как тебе нужно.
 

Фанат

oncle terrible
Команда форума
Domovoj
а без предварительной записи по массивам слабо? ;-)
 
Сверху