[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не корректно работает Mysql запрос
TrueTrAxeX
Здравствуйте. Происходят какие то чудеса. Не могу уже целый день обойти такую вещь.

У меня в таблице `operations`, есть поле `login` в котором много одинаковых значений. И есть поле `id` (оно уникально). Мне нужно упорядочить значения по полю `id` и чтобы логин НЕ ПОВТОРЯЛСЯ. Тоесть нужно достать уникальные значения `login` и упорядочить их по `id`.

Сделал запрос такого рода:
SELECT DISTINCT(login) FROM `operations` ORDER BY `id` DESC LIMIT 10

Он достает уникальные поля `login`, НО не сортирует поля по `id`!!! Пожалуйста помогите!!!!! ph34r.gif



Спустя 9 минут, 54 секунды (18.02.2011 - 00:28) Evilsoul написал(а):
Не уверен на 100 %, но ты же поле id не выбираешь, с чего ему сортировать?

Спустя 1 минута, 34 секунды (18.02.2011 - 00:29) Invis1ble написал(а):
TrueTrAxeX
mysql_error() ничего не выдает?

Спустя 2 минуты, 4 секунды (18.02.2011 - 00:31) Invis1ble написал(а):
Evilsoul
Цитата
поле id не выбираешь, с чего ему сортировать?

это здесь не причем. Сортировка в независимости от выборки должна выполняться

Спустя 3 минуты, 14 секунд (18.02.2011 - 00:35) TrueTrAxeX написал(а):
Вот и я тоже думаю, а он не сортирует laugh.gif

Спустя 1 минута, 23 секунды (18.02.2011 - 00:36) Invis1ble написал(а):
и еще, меня немного смутил твой синтаксис. на всякий случай попробуй так:
SELECT DISTINCT `login` FROM `operations` ORDER BY `id` DESC LIMIT 10


ПС. еще раз: mysql_error() ничего не выдает?

Спустя 1 минута, 37 секунд (18.02.2011 - 00:38) TrueTrAxeX написал(а):
Mysql error ничего не выдает:(

Спустя 3 минуты, 49 секунд (18.02.2011 - 00:41) Invis1ble написал(а):
странно. Выложи сюда дамп. Я проверю

Спустя 48 секунд (18.02.2011 - 00:42) TrueTrAxeX написал(а):
Попробуйте создать таблицу и в ней поле login (или любое другое) и запишите туда 3 одинаковых значения и 3 разных. Потом попробуйте упорядочить по ID, чтобы поле login не повторялось больше 1 раза. Не получится... wink.gif

Спустя 1 минута, 33 секунды (18.02.2011 - 00:44) TrueTrAxeX написал(а):
http://studio-mc.ru/operations.rar - Вот дамп базы.

Спустя 1 минута, 1 секунда (18.02.2011 - 00:45) Invis1ble написал(а):
TrueTrAxeX
Цитата
Попробуйте создать таблицу и в ней поле login (или любое другое) и запишите туда 3 одинаковых значения и 3 разных. Потом попробуйте упорядочить по ID, чтобы поле login не повторялось больше 1 раза. Не получится...

зачем мне что-то создавать? smile.gif
у меня есть под рукой таблица с похожей структурой, там запрос срабатывает корректно. Имхо, у тебя где-то в логике php-кода, который выводит значения ошибка.
В любом случае, я не экстрасенс. Нужно видеть конкретную таблицу с данными, поэтому дамп в студию smile.gif

Спустя 2 минуты, 13 секунд (18.02.2011 - 00:47) TrueTrAxeX написал(а):
SELECT DISTINCT `login` FROM `operations` GROUP BY `id` ORDER BY `login` DESC LIMIT 10

А нет все равно не работает запрос:(

Спустя 2 минуты, 47 секунд (18.02.2011 - 00:50) Invis1ble написал(а):
TrueTrAxeX
select distinct `login` from `operations` order by `id` desc limit 10

срабатывает корректно. у тебя где-то в php-коде ошибка

Спустя 2 минуты, 3 секунды (18.02.2011 - 00:52) Invis1ble написал(а):
проверь в phpMyAdmin если не веришь wink.gif

Спустя 43 секунды (18.02.2011 - 00:52) TrueTrAxeX написал(а):
теперь попробуйте вывести это через while($row = mysql_fetch_array) { echo $row['login']."<br>"; }

Логины будут выводится не по ID, это точно...sad.gif

Спустя 4 минуты, 48 секунд (18.02.2011 - 00:57) Invis1ble написал(а):
Да зачем мне что-то пробовать?
Если я знаю, что 2+2=4, мне не обязательно пользоваться калькулятором, чтобы проверить это =)
Ты полностью код покажи, как ты выводишь

Спустя 20 минут, 6 секунд (18.02.2011 - 01:17) TrueTrAxeX написал(а):
function scale()
{


$max = $this->q("SELECT `login`,`id` FROM `operations` GROUP BY `login` ORDER BY `id`");

$arr = mysql_fetch_array($max);


$content.= "<table>";

do
{
$content.= "<tr><td class=\"name\">{$arr[login]}</td>";

$content.= "</tr>";
}
while($arr = mysql_fetch_array($max));

$content.= "</table>";

return $content;
}


Вот вся функция

Спустя 2 минуты, 9 секунд (18.02.2011 - 01:20) TrueTrAxeX написал(а):
Я сам удивляюсь почему так работает!!! Он не упорядочивает вывод по `id` прсото напросто! Есть уникальные логины это да! Но они не упорядочены по ID, можете сравнить сами!


Я уже незнаю, может это баг Mysql, может я глючу unsure.gif Но он реально не упорядочивает по ID:(

Спустя 54 секунды (18.02.2011 - 01:20) Invis1ble написал(а):
TrueTrAxeX
Че за помесь Попова с ООП ? biggrin.gif

Спустя 1 минута, 33 секунды (18.02.2011 - 01:22) TrueTrAxeX написал(а):
Да это я просто для наглядности сделал:) unsure.gif

Спустя 2 минуты, 40 секунд (18.02.2011 - 01:25) Invis1ble написал(а):
function uniqueLogins()
{
$query = 'select distinct `login` from `operations` order by `id` desc limit 10';
$res = mysql_query($query) or die(mysql_error());

$content = '<table>'

while ($user = mysql_fetch_assoc($res))
$content .= '<tr><td class="name">' . $user['login'] . '</td></tr>';

$content .= '</table>';

return $content;
}

Спустя 3 минуты, 6 секунд (18.02.2011 - 01:28) TrueTrAxeX написал(а):
Эта функция не сортирует `login` по `id` в обратном порядке. Посмотрите внимательно! Я вот это и доказываю, что данный запрос не сортирует `login` по `id`, в этом и чудо заключается!

Спустя 5 минут, 45 секунд (18.02.2011 - 01:33) YVSIK написал(а):
$max = $this->q("SELECT 

а что это? ->qчто за команда?

Спустя 1 минута, 45 секунд (18.02.2011 - 01:35) TrueTrAxeX написал(а):
Цитата (YVSIK @ 17.02.2011 - 22:33)
$max = $this->q("SELECT 

а что это? ->q

За место mysql_query

Спустя 1 минута, 29 секунд (18.02.2011 - 01:37) Invis1ble написал(а):
YVSIK
Цитата
а что это? ->q

метод q(). Обвертка mysql_query()

Спустя 11 минут, 32 секунды (18.02.2011 - 01:48) Invis1ble написал(а):
TrueTrAxeX
Цитата
Эта функция не сортирует `login` по `id` в обратном порядке. Посмотрите внимательно! Я вот это и доказываю, что данный запрос не сортирует `login` по `id`, в этом и чудо заключается!

ну как это не сортирует? у меня сортирует, а у тебя - нет ????
<?php

$dbh = mysql_connect('localhost', 'admin', 'admin') or die(mysql_error());
mysql_select_db('test', $dbh) or die(mysql_error());

function uniqueLogins()
{
$query = 'select distinct `login` from `operations` order by `id` desc limit 10';
$res = mysql_query($query) or die(mysql_error());

$content = '<table>';

while ($user = mysql_fetch_assoc($res))
$content .= '<tr><td class="name">' . $user['login'] . '</td></tr>';

$content .= '</table>';

return $content;
}

echo uniqueLogins();

?>

выдает:
topor
traxex865
traxex864

В чем проблема?

Спустя 3 минуты, 51 секунда (18.02.2011 - 01:52) TrueTrAxeX написал(а):
А все вроде заработало, спасибо!

Спустя 4 минуты, 15 секунд (18.02.2011 - 01:56) Invis1ble написал(а):
блин, жесть =)
перед тем как говорить "Не работает!" нужно наверно проверить, да? wink.gif

Спустя 2 минуты, 29 секунд (18.02.2011 - 01:59) TrueTrAxeX написал(а):
И можно вопрос напоследок! Попробуйте упорядочить вот эту базу по такому же методу http://studio-mc.ru/operations.sql.zip у меня заглючило:( Там сначала по идее должен идти логин traxex865, а потом topor, а сначала идет topor smile.gif Вот про это я и говорил)

Спустя 13 минут, 18 секунд (18.02.2011 - 02:12) Invis1ble написал(а):
TrueTrAxeX
OMG!
Цитата
Там сначала по идее должен идти логин traxex865, а потом topor

по чьей идее? все правильно сортирует. Вот запусти такой код:
<?php

$dbh = mysql_connect('localhost', 'admin', 'admin') or die(mysql_error());
mysql_select_db('test', $dbh) or die(mysql_error());

function uniqueLogins()
{
$query = 'select distinct `login`, `id` from `operations` group by `login` order by `id` desc limit 10';
$res = mysql_query($query) or die(mysql_error());

$content = '<table>';

while ($user = mysql_fetch_assoc($res))
{
$content .= '<tr>';
$content .= '<td class="name">' . $user['id'] . '</td>';
$content .= '<td class="name">' . $user['login'] . '</td>';
$content .= '</tr>';
}

$content .= '</table>';

return $content;
}

echo uniqueLogins();

?>

Надеюсь, ты поймешь в чем дело....

Спустя 2 минуты, 37 секунд (18.02.2011 - 02:15) Invis1ble написал(а):
Выборка ведь идет с начала таблицы! И вобще, какая-то странная у тебя сортировка - по id. Судя по всему у тебя алгоритм хромает.

Спустя 11 часов, 4 минуты, 45 секунд (18.02.2011 - 13:20) TrueTrAxeX написал(а):
А мне нужно чтобы выборка шла с конца таблицы sad.gif Если поможете как это можно реализовать, то вообще супер будет!

Спустя 4 часа, 43 минуты, 58 секунд (18.02.2011 - 18:03) Invis1ble написал(а):
Ты объясни толком, зачем тебе такая сортировка понадобилась. Наверняка есть более грамотное решение твоей задачи.

Спустя 21 минута, 37 секунд (18.02.2011 - 18:25) inpost написал(а):
`id` DESC

Спустя 4 минуты, 42 секунды (18.02.2011 - 18:30) Invis1ble написал(а):
inpost
не, там все несколько тоньше. да и order by id desc там и так в запросе стоит
Быстрый ответ:

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