[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос
freaky
Подскажите пожалуйста с запросом. :)

Есть таблица с пятью записями. Нужно их вывести так, что бы подсчиталось количество их повторений. К примеру из пяти записей в поле one есть три раза да и два раза нет;
выводилось так:
да - 3
нет - 2

Мой код делает всё правильно за одни исключением,
он выводит так:
да - 3
да - 3
нет - 2
да- 3
нет - 2

что здесь нужно добавить!?



$res = mysql_query ("select * from table");
$row = mysql_fetch_array ($res);

do
{
$res2 = mysql_query ("select count(*) from table where one='$row[one]'");
$row2 = mysql_fetch_array ($res2);

echo "".$row['one']." - ".$row2[0]."<br>";


}
while ($row = mysql_fetch_array ($res));





Спустя 19 минут, 25 секунд (21.07.2011 - 06:12) Invis1ble написал(а):
о боже....

$r = mysql_query("select count(*) from `table` where `one` = 'да'");
$y_cnt = mysql_result($r, 0);
$r = mysql_query("select count(*) from `table` where `one` = 'нет'");
$n_cnt = mysql_result($r, 0);

echo 'да - ' . $y_cnt . '<br />' . 'нет - ' . $n_cnt;

Спустя 11 минут, 52 секунды (21.07.2011 - 06:24) freaky написал(а):
да, это самое элементарное...я бы так и сделал, это ведь был просто пример...так я могу и не знать всех записей и их может быть сотни...

Спустя 11 минут, 57 секунд (21.07.2011 - 06:36) Invis1ble написал(а):
freaky
Цитата
так я могу и не знать всех записей и их может быть сотни

не понял.... ты о чем?

Спустя 1 минута, 50 секунд (21.07.2011 - 06:38) freaky написал(а):
в поле one в разных строках может быть куча разных слов...поэтому я и не могу так писать запрос... where `one` = 'да'

Спустя 3 минуты, 49 секунд (21.07.2011 - 06:42) Invis1ble написал(а):
тогда както так:
$rOnes = mysql_query("select distinct(`one`) as `one` from `table`");
while ($row = mysql_fetch_assoc($rOnes)) {
$rCnt = mysql_query("select count(*) from `table` where `one` = '" . mysql_real_escape_string($row['one']) . "'");
echo $row['one'] . ' - ' . mysql_result($rCnt) . '<br />';
}

Спустя 15 минут, 55 секунд (21.07.2011 - 06:57) freaky написал(а):
спасибо...не знал про distinct...вроде бы всё работает...только вот ещё, а как отсортировать по количеству...?!

Спустя 4 минуты, 46 секунд (21.07.2011 - 07:02) Invis1ble написал(а):
$rOnes = mysql_query("select distinct(`one`) as `one` from `table`");
while ($row = mysql_fetch_assoc($rOnes)) {
$rCnt = mysql_query("select count(*) from `table` where `one` = '" . mysql_real_escape_string($row['one']) . "'");
$values[] = mysql_result($rCnt);
}

sort($values);

Спустя 11 минут, 42 секунды (21.07.2011 - 07:14) freaky написал(а):
а как в этом случае написать вывод echo?

Спустя 3 минуты, 31 секунда (21.07.2011 - 07:17) Invis1ble написал(а):
$rOnes = mysql_query("select distinct(`one`) as `one` from `table`");
while ($row = mysql_fetch_assoc($rOnes)) {
$rCnt = mysql_query("select count(*) from `table` where `one` = '" . mysql_real_escape_string($row['one']) . "'");
$values[$row['one']] = mysql_result($rCnt);
}

sort($values);

foreach ($values as $v => $cnt)
echo $v . ' - ' . $cnt . '<br />';

Спустя 35 минут, 39 секунд (21.07.2011 - 07:53) inpost написал(а):
SELECT `one`,COUNT(*) AS `cnt` FROM `table` GROUP BY `one`

Спустя 7 минут, 26 секунд (21.07.2011 - 08:01) freaky написал(а):
foreach ($values as $v => $cnt)
echo $v . ' - ' . $cnt . '<br />';


не выводится $row['one'], просто нумерация от 0 и так далее...

Спустя 21 минута, 20 секунд (21.07.2011 - 08:22) Invis1ble написал(а):
freaky
sort() надо заменить на asort()
кстати, вариант inpost'a намного оптимальней

Спустя 11 минут, 20 секунд (21.07.2011 - 08:33) freaky написал(а):
спасибо,
теперь всё хорошо, для сортировки я использовал arsort()...

Спустя 5 минут, 12 секунд (21.07.2011 - 08:38) neadekvat написал(а):
Цитата (freaky @ 21.07.2011 - 09:33)
спасибо,
теперь всё хорошо, для сортировки я использовал arsort()...

А что, ни пост Инпоста, ни пост Инвизибла о том, что вариант Инпоста оптимальнее, ты не увидел? Или уже типа впадлу было исправлять? Вариант Инпоста не то, чтобы "оптимальнее", это просто по сути единственное верное решение. За вариант Invis1ble надо бить по рукам кроме конкретных исключений.

Спустя 35 минут, 16 секунд (21.07.2011 - 09:14) Invis1ble написал(а):
neadekvat
Цитата
За вариант Invis1ble надо бить по рукам кроме конкретных исключений.

Эм..... не надо, я сонный =)

Спустя 1 день, 21 час, 6 минут, 38 секунд (23.07.2011 - 06:20) freaky написал(а):
Цитата (inpost @ 21.07.2011 - 04:53)
SELECT `one`,COUNT(*) AS `cnt` FROM `table` GROUP BY `one`

я просто не понимаю как использовать такой вариант(
он и не считает и сортирует по алфавиту...(

Спустя 4 минуты, 55 секунд (23.07.2011 - 06:25) Invis1ble написал(а):
SELECT `one`, COUNT(*) AS `cnt`
FROM `table`
GROUP BY `one`
ORDER BY `cnt`

это с сортировкой. Показывай код свой, что у тебя там не считает.

Спустя 3 минуты, 35 секунд (23.07.2011 - 06:29) freaky написал(а):
Цитата (Invis1ble @ 21.07.2011 - 04:17)
$rOnes = mysql_query("select distinct(`one`) as `one` from `table`");
while ($row = mysql_fetch_assoc($rOnes)) {
$rCnt = mysql_query("select count(*) from `table` where `one` = '" . mysql_real_escape_string($row['one']) . "'");
$values[$row['one']] = mysql_result($rCnt);
}

arsort($values);

foreach ($values as $v => $cnt)
echo $v . ' - ' . $cnt . '<br />';

хотел ещё узнать как тут сделать ещё одну выборку в цикле? в каком месте?

  
$res = mysql_query ("select * from tabl2 where one2='$row[one]'");
$row2 = mysql_fetch_array($res);


выборка из другой таблицы для того что бы сделать ссылку для one, т.е. доставь его ид из другой таблицы... я пробывал в разных местах, и внутри while а он выводит для всех один ид, как буд-то без цикла

Спустя 4 минуты, 32 секунды (23.07.2011 - 06:33) Invis1ble написал(а):
freaky
я говорю, показывай код с запросом из предыдущего поста )
а это
Цитата
$rOnes = mysql_query("select distinct(`one`) as `one` from `table`");
while ($row = mysql_fetch_assoc($rOnes)) {
$rCnt = mysql_query("select count(*) from `table` where `one` = '" . mysql_real_escape_string($row['one']) . "'");
$values[$row['one']] = mysql_result($rCnt);
}

arsort($values);

foreach ($values as $v => $cnt)
echo $v . ' - ' . $cnt . '<br />';

выкинь в топку, это я спросоня сморозил тогда. neadekvat прав, это плохой вариант.
Цитата
хотел ещё узнать как тут сделать ещё одну выборку в цикле? в каком месте?

это уже опосля

Спустя 5 минут, 7 секунд (23.07.2011 - 06:38) freaky написал(а):
    $res44 = mysql_query ("SELECT `one`, COUNT(*) AS `cnt` FROM `table` GROUP BY `one` ORDER BY `cnt` DESC");
$row44 = mysql_fetch_array ($res44);

do
{
echo $row44[0];echo "<br>";
}
while ($row44 = mysql_fetch_array ($res44));

я делаю так он выводит текст в $row44[0], а как вывести сами цифры которые подсчитаны?
и откуда cnt?

Спустя 53 секунды (23.07.2011 - 06:39) Haotarez написал(а):
$row44[1] - это и есть то, что он подсчитал вирт. поле cnt

Спустя 3 минуты, 9 секунд (23.07.2011 - 06:43) Invis1ble написал(а):
Цитата
do
{
echo $row44[0];echo "<br>";
}
while ($row44 = mysql_fetch_array ($res44));

забудь про такой синтаксис, это зло
$q = "
SELECT `one`, COUNT(*) AS `cnt`
FROM `table`
GROUP BY `one`
ORDER BY `cnt`"
;

$r = mysql_query($q) or die(mysql_error());
while ($row = mysql_fetch_assoc($r))
echo $row['one'] . ' - ' . $row['cnt'] . '<br />';

Спустя 1 минута, 39 секунд (23.07.2011 - 06:44) freaky написал(а):
спасибо, это вариант конечно проще первого, но работают они оба нормально

Спустя 6 минут, 57 секунд (23.07.2011 - 06:51) Invis1ble написал(а):
freaky
что в твоем понимании "нормально"? первый вариант создает кучу запросов в цикле, тогда как второй - один-единственный запрос. Это самый оптимальный вариант. Качественная работа программиста заключается не только в том, чтобы все работало, но еще и работало при минимальных затратах ресурсов, тобишь с минимальной нагрузкой на сервер и минимальным временем выполнения скрипта.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.