2016-04-13 6 views
4

Я ищу способ получить место определенного элемента после сортировки моего mysqliresult. У меня есть таблица вроде этого:Получить позицию строки после сортировки результата mysqli

id_______|_Name_____________|_ParentID 
58  | Carl    | 15 
55  | Clark   | 15 
12  | David   | 4 
23  | Sophie   | 15 
45  | Amanda   | 15 

Я заинтересован только в строках с ParentID 15, и я хочу, чтобы отсортировать их по имени. Затем я хочу посмотреть конкретный элемент, скажем, id 55 (Clark) и узнать, какой номер строки он помещается. Я хочу, чтобы создать таблицу, как это:

id_______|_Name_____________|_ParentID 
45  | Amanda   | 15 
58  | Carl    | 15 
55  | Clark   | 15 
23  | Sophie   | 15 

Затем я хочу, чтобы получить номер 3, когда я заинтересован в Clark, так как его строка является третьей строкой в ​​новой таблице.

Это вообще возможно сделать с mysqli? Если это невозможно сделать в одном заявлении, я должен зациклять все выбранные элементы и иметь счет, который увеличивается для каждого элемента, пока я не найду свой правильный, но мне бы очень хотелось избежать этого, поскольку количество элементов в цикле Тогу быстро увеличивается.

Заранее благодарен!

+0

Просто вам нужно найти место "Кларк" или вы также должны ParentID = 15 и имя сортировки запроса заказа также? – RJParikh

ответ

2

Попробуйте это:

SELECT t.*, 
     (SELECT COUNT(*) FROM YourTable s 
     WHERE t.parent_id = s.parent_id 
      and t.name <= s.name) as Cnt 
FROM YourTable t 

Выход:

id_______|_Name_____________|_ParentID__|_Cnt 
58  | Carl    | 15  | 2 
55  | Clark   | 15  | 3 
12  | David   | 4   | 1 
23  | Sophie   | 15  | 4 
45  | Amanda   | 15  | 1 

Теперь Cnt столбец содержит положение строки, поэтому, чтобы получить какой-либо одной из своих позиций:

SELECT tt.cnt 
FROM (...above query here...) tt 
WHERE tt.name = ? --optional 
    AND tt.parent_id = ? --optional 
+0

пользователь хочет, чтобы только parentID 15 записывался как выход. – RJParikh

+0

И? Я дал ему динамический ответ для работы с каждым родительским идентификатором, это кажется странным запросом только для запроса одного родительского ID @RuchishParikh – sagi

+0

Проверено. Работает нормально. :) – RJParikh

-1

Try

SELECT * FROM table_name WHERE parent_id = 15 ORDER BY name ASC; 
+0

Нет, он говорит, что хочет получить такой стол, после чего он может получить тот, который ему нравится из набора результатов, потому что результат сортируется. –

0

Вы можете получить строку для Clark, выполнив:

select count(*) 
from t 
where t.ParentId = 15 and 
     t.Name <= 'Clark'; 

Индексы t(Name, ParentId) ускорит производительность.

+0

Это будет работать только для получения ** определенного ** рейтинга имени – sagi

+0

Как вы относитесь к @sagi? –

+0

Я имею в виду, если вы хотите получить позицию 'Clark' и' Carl', вам придется выполнить этот запрос дважды. – sagi

Смежные вопросы