[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: mysql выборка
freaky
Здравствуйте. Такая задачка. Есть таблица с футбольными клубами из которой образуется турнирная таблица. Поля name - имя команды, points - очки. Выборка с сортировкой по полю points.

$result = mysql_query("SELECT * FROM tabl ORDER BY points",$db);
$myrow = mysql_fetch_array ($result);


далее цикл. Задача в следующем: сделать для каждой строки номер с позицией.
т.е. сейчас так,
Спартак 20
ЦСКА 19
Зенит 18,
а нужно,
1. Спартак 20
2. ЦСКА 19
3. Зенит 18



Спустя 3 минуты, 53 секунды (22.06.2010 - 16:29) waldicom написал(а):
Если будет выводиться в HTML, то можно воспользоваться пронумерованным списком. Или в цикле ввести переменную и увеличивать её.

Спустя 5 минут, 39 секунд (22.06.2010 - 16:34) freaky написал(а):
лучше воспользоваться php. Увеличивать переменную это типа в цикле while ?
$a++?

Спустя 9 минут, 21 секунда (22.06.2010 - 16:44) waldicom написал(а):
Цитата (freaky @ 22.06.2010 - 15:34)
лучше воспользоваться php. Увеличивать переменную это типа в цикле while ?
$a++?

Да, инициализировать еденицей и помотм++. Конечно придется вставлять этот счетчик в массив, чтобы он передался на страницу.
А почему не нравится вариант с тегами html?

Спустя 10 минут, 15 секунд (22.06.2010 - 16:54) qpayct написал(а):
в mysql никак нельзя разве значение инкрементить?

Спустя 1 час, 36 минут, 22 секунды (22.06.2010 - 18:30) freaky написал(а):
спасибо я разобрался

Спустя 3 часа, 54 минуты, 2 секунды (22.06.2010 - 22:24) SlavaFr написал(а):
Цитата (qpayct @ 22.06.2010 - 13:54)
в mysql никак нельзя разве значение инкрементить?

можно

select @i:= ifnull(@i+1,1) AS `counter` , ....

но для решения актуальной проблемы не нужно.

Спустя 7 минут, 29 секунд (22.06.2010 - 22:32) freaky написал(а):
такой вот запрос
$result143 = mysql_query("SELECT COUNT(id) FROM tabl WHERE name='$nam' AND status=1 ORDER BY id DESC LIMIT 5",$db);
$myrow143 = mysql_fetch_array($result143);
echo $myrow143[0];

Проблема в том что нужно что бы считало 5 последних записей, а считаются все. чём проблема?

Спустя 4 минуты, 11 секунд (22.06.2010 - 22:36) waldicom написал(а):
GROUP BY `id`

Спустя 45 минут, 6 секунд (22.06.2010 - 23:21) freaky написал(а):
теперь считает по последним 5-ти, но не правильно, т.е. явно где должно быть 3 почему то только 2 выводить. Может ещё ошибка какая?
В PHP MYADMIN делаю такой же запрос и всё правильно показывает.
$result143 = mysql_query("SELECT COUNT(id) FROM tabl WHERE name='$nam' AND res1 > res2 GROUP BY `id` DESC LIMIT 5",$db);
$myrow143 = mysql_fetch_array($result143);

Спустя 51 минута, 31 секунда (23.06.2010 - 00:12) waldicom написал(а):
а где вывод полученных результатов? Там надо в цикле выводить.

Спустя 6 часов, 4 минуты, 37 секунд (23.06.2010 - 06:17) freaky написал(а):
мне не нужно в цикле ничего выводить
echo $myrow143[0]

просто сумма подсчёта нужна

Спустя 4 часа, 36 минут, 20 секунд (23.06.2010 - 10:53) waldicom написал(а):
Цитата (freaky @ 23.06.2010 - 05:17)
мне не нужно в цикле ничего выводить
echo $myrow143[0]

просто сумма подсчёта нужна

сумма чего? Всех элементов? Зачем тогда count()?

Спустя 41 минута, 33 секунды (23.06.2010 - 11:35) SlavaFr написал(а):
@freaky так как ты в sql очень непонятно изяснился и твой 1-й вопрос совсем неувязывается с твоим последним ответом, то попробуй всю проблему детально словами обяснить.

Спустя 16 минут, 18 секунд (23.06.2010 - 11:51) freaky написал(а):
хорошо, мне нужно посчитать сколько есть записей с условием
$result143 = mysql_query("SELECT COUNT(id) FROM tabl WHERE name='$nam' AND res_1 > res_2 GROUP BY `id` DESC LIMIT 5",$db);
$myrow143 = mysql_fetch_array($result143);

в переменной nam значение которое есть в таблице, тут всё правильно.
res_1 and res_2 int , т.е. там числовое значение. Нужно найти сколько всего записей с условием где в поле name есть $name и res_1 больше res_2.
По сути запрос считает и выводит цифру, но неверную.

Спустя 2 минуты, 4 секунды (23.06.2010 - 11:53) waldicom написал(а):
тогда GROUP BY не нужен, но и LIMIT нафига?

SELECT COUNT(*) FROM tabl WHERE name='$nam' AND res_1 > res_2 

ы?

Спустя 7 часов, 35 минут, 47 секунд (23.06.2010 - 19:29) freaky написал(а):
ладно, я сделал в цикле
$result150 = mysql_query("SELECT * FROM table WHERE name='$nam' AND res_1 > res_2 GROUP BY `id` DESC LIMIT 5",$db);
$myrow150 = mysql_fetch_array($result150);

do {
printf (""
);
}
while ($myrow150 = mysql_fetch_array ($result150));

Как мне теперь сделать подсчёт?

Спустя 1 минута, 33 секунды (23.06.2010 - 19:31) freaky написал(а):
Цитата (waldicom @ 23.06.2010 - 08:53)
тогда GROUP BY не нужен, но и LIMIT нафига?

SELECT COUNT(*) FROM tabl WHERE name='$nam' AND res_1 > res_2 

ы?

так мне нужен подсчёт с условием res_1 > res_2 по последним пяти записям.

Спустя 4 минуты, 1 секунда (23.06.2010 - 19:35) waldicom написал(а):
Цитата (freaky @ 23.06.2010 - 18:31)
так мне нужен подсчёт с условием res_1 > res_2 по последним пяти записям.

Как определяются последние записи? По дате? В каком поле хранится дата?

Спустя 9 минут, 38 секунд (23.06.2010 - 19:44) Gabriel написал(а):
freaky
последние в низу всегда. ORDER BY field DESC в помощь.

Спустя 5 минут (23.06.2010 - 19:49) freaky написал(а):
определяются по ид (int)

Спустя 4 минуты, 20 секунд (23.06.2010 - 19:54) waldicom написал(а):
Цитата (Gabriel @ 23.06.2010 - 18:44)
последние в низу всегда. ORDER BY field DESC в помощь.

Более чем спорное утверждение

Спустя 2 минуты, 21 секунда (23.06.2010 - 19:56) freaky написал(а):
Цитата (Gabriel @ 23.06.2010 - 16:44)
freaky
последние в низу всегда. ORDER BY field DESC в помощь.

ну так я с этого и начинал, данная сортировка считает правильно, но считает все записи, а мне надо последние 5. Как буд то фраза LIMIT 5 игнорируется.
Почему же LIMIT 5 не срабатывает?

Спустя 15 часов, 38 минут, 53 секунды (24.06.2010 - 11:35) freaky написал(а):
никто не поможет?

Спустя 22 минуты, 7 секунд (24.06.2010 - 11:57) tomash написал(а):
SELECT * FROM (SELECT * FROM table WHERE name='$nam' ORDER BY `id` DESC LIMIT 5) AS t WHERE t.res_1 > t.res_2 


А так?
LIMIT это самая последняя операция выполняемая СУБД, сначала выполняеться запрос по всем условия, а потом возвращаеться 5 из них ))))

Спустя 20 минут, 52 секунды (24.06.2010 - 12:18) waldicom написал(а):
SELECT COUNT(*) FROM tabl WHERE name='$nam' AND res_1 > res_2 AND `id` IN (select `id` FROM `tabl` ORDER BY `id` DESC LIMIT 5)

Спустя 2 минуты, 44 секунды (24.06.2010 - 12:21) tomash написал(а):
waldicom
Только DESC забыли

Спустя 5 минут, 49 секунд (24.06.2010 - 12:26) waldicom написал(а):
Спасиб, отредактировал.

Спустя 4 часа, 33 секунды (24.06.2010 - 16:27) freaky написал(а):
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\page.php on line 53

Спустя 2 минуты, 31 секунда (24.06.2010 - 16:29) tomash написал(а):
сделайте mysql_query() OR die(mysql_error());

И посмотрите что там за ошибка в запросе

Спустя 2 минуты, 50 секунд (24.06.2010 - 16:32) SlavaFr написал(а):
пользуйся mysql_error и mysql_num_rows чтобы выяснить проблему с передоваемым в mysql_fetch_array ресурсом.

Спустя 23 секунды (24.06.2010 - 16:33) freaky написал(а):
Warning: Wrong parameter count for mysql_query() in Z:\home\localhost\page.php on line 56

Спустя 1 минута, 58 секунд (24.06.2010 - 16:35) SlavaFr написал(а):
что теперь каждую строчку переводить нужно?

Спустя 2 минуты, 59 секунд (24.06.2010 - 16:38) tomash написал(а):
COUNT(*) AS cnt

Спустя 2 минуты, 19 секунд (24.06.2010 - 16:40) freaky написал(а):
ничего не изменилось...

Спустя 3 минуты, 4 секунды (24.06.2010 - 16:43) freaky написал(а):
SELECT COUNT(*) FROM tabl WHERE name='$nam' AND res_1 > res_2 AND `id` IN (select `id` FROM `tabl` ORDER BY `id` DESC LIMIT 5)

Помойму плохая идея, раньше хоть считало, хоть и не так как надо, а теперь только ошибки.

Спустя 7 минут, 11 секунд (24.06.2010 - 16:50) SlavaFr написал(а):
да причем тут query? тут же параметров не хватает!
http://translate.google.de/translate_t?hl=...ry&sl=en&tl=ru#

Спустя 34 минуты, 15 секунд (24.06.2010 - 17:24) freaky написал(а):
каких именно? в запросах типа
AND `id` IN (SELECT `id` FROM `tabl` ORDER BY `id` DESC LIMIT 5)

не разбираюсь

Спустя 3 минуты, 30 секунд (24.06.2010 - 17:28) tomash написал(а):
Сделайте вывод запроса в броузер! И посмотрите что скрипт в БД пихает

Спустя 59 секунд (24.06.2010 - 17:29) freaky написал(а):
может вернуться к первоначальному варианту, там без ошибок, всё считается, и понять почему считает не так как надо!?

Спустя 2 минуты, 12 секунд (24.06.2010 - 17:31) tomash написал(а):
SELECT count(*) FROM (SELECT * FROM table WHERE name='$nam' ORDER BY `id` DESC LIMIT 5) AS t WHERE t.res_1 > t.res_2 


попрбуйте прямо в СУБД выполнить запрос

Спустя 43 секунды (24.06.2010 - 17:32) tomash написал(а):
Цитата (freaky @ 24.06.2010 - 14:29)
может вернуться к первоначальному варианту, там без ошибок, всё считается, и понять почему считает не так как надо!?

Он у Вас неправильно считает именно потому что запрос не правильный

Спустя 6 минут, 55 секунд (24.06.2010 - 17:39) waldicom написал(а):
короче, тут по ходу надо не только проготовить и положить в рот, но еще и прожевать.
Неужели трудно сделать такое:
$query = "SELECT COUNT(*) FROM tabl WHERE name='$nam' AND res_1 > res_2 AND `id` IN (select `id` FROM `tabl` ORDER BY `id` DESC LIMIT 5)";
$result = mysql_query($query) or die(mysql_error());

Спустя 15 минут, 9 секунд (24.06.2010 - 17:54) freaky написал(а):
Цитата (waldicom @ 24.06.2010 - 14:39)
короче, тут по ходу надо не только проготовить и положить в рот, но еще и прожевать.
Неужели трудно сделать такое:
$query = "SELECT COUNT(*) FROM tabl WHERE name='$nam' AND res_1 > res_2 AND `id` IN (select `id` FROM `tabl` ORDER BY `id` DESC LIMIT 5)";
$result = mysql_query($query) or die(mysql_error());

я это уже делал и писал.
tomash спасибо, теперь всё правильно считает, как надо.
Быстрый ответ:

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