Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не сортируется...
 
 автор: tvv123456   (04.02.2010 в 22:39)   письмо автору
 
 

Всем привет!
Народ помогите разобраться, я туплю вообще не могу Вот код(пояснения ниже):
<? $res mysql_query("SELECT `distrib`,level, COUNT(*) AS `cnt` FROM `zakazy` WHERE level='1' GROUP BY `distrib` ORDER BY 'cnt' ASC",$db)

Вообщем мне нужно выбрать поля distrib и level и сгруппировать их по distrib, Вроде все работает отлично, НО не работает ORDER BY 'cnt' ASC - не сортируеться по этому полю
Вот скрипт для вывода(это я проверяю работоспособность кода):
<? while($row mysql_fetch_assoc($res)){echo $row['distrib']."-".$row["level"]."-".$row['cnt']."<br>";}

И конечно же последний параметр($row['cnt']) далек от ORDER BY ... ASK.
Помогите найти косячок пожалуйста.

  Ответить  
 
 автор: Trianon   (04.02.2010 в 22:57)   письмо автору
 
   для: tvv123456   (04.02.2010 в 22:39)
 

нельзя выбрать поле A, сгруппировав по B .
Группируя по B, можно выбрать только агрегат по полю A

  Ответить  
 
 автор: tvv123456   (05.02.2010 в 00:02)   письмо автору
 
   для: Trianon   (04.02.2010 в 22:57)
 

Не сильно еще разобрался в вашем ответе, но как мне можно осуществить то что мне нужно?

  Ответить  
 
 автор: Trianon   (05.02.2010 в 11:10)   письмо автору
 
   для: tvv123456   (05.02.2010 в 00:02)
 

Вы не написали, что Вам нужно.
Попробуйте сформулировать проблему без употребления слова "группировать" (его значение в контексте SQL Вы не понимаете)

  Ответить  
 
 автор: tvv123456   (05.02.2010 в 17:50)   письмо автору
 
   для: Trianon   (05.02.2010 в 11:10)
 

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

У меня есть таблица в БД называеться zakazy, куда заносяться все заказы вот структура:
CREATE TABLE `zakazy` (
  `id` bigint(15) NOT NULL auto_increment,
  `level` int(2) NOT NULL, -- уровень который заказал пользователь
  `distrib` bigint(15) NOT NULL, -- тот кто продает уровень пользователю
  `status` int(1) NOT NULL default '0', -- подтвержден ли заказ
  PRIMARY KEY  (`id`)
)


Дак вот нужно выбрать все эти заказы, подсчтитать у кого сколько заказов каждого уровня(хотя по идее можно только первый уровень). А дальше отсортировать так, чтобы тот у кого меньше всего рефералов 1-го уровня(подсчитать это можно по полю distrib), сколько раз оно встречаеться. Вот как-то так.
Очень не хочеться создавать новые таблицы или новые поля в таблице пользователей, вроде бы и по этой таблице можно достаточно точно сказать у кого и сколько рефералов на каждом уровне, вроде все группируеться как надо, но не упорядочиваеться как надо(см. первый пост)

  Ответить  
 
 автор: t3ma   (05.02.2010 в 18:45)   письмо автору
 
   для: tvv123456   (05.02.2010 в 17:50)
 

<?php
 $res 
mysql_query("SELECT `distrib` FROM `zakazy` WHERE level = 1 GROUP BY `distrib` ORDER BY 'cnt' ASC",$db);
?>

  Ответить  
 
 автор: tvv123456   (05.02.2010 в 20:33)   письмо автору
 
   для: t3ma   (05.02.2010 в 18:45)
 

В вашем примере подразумеваеться что существует некое поле cnt? Такого поля на самом деле не существует

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования