2013-12-25 4 views
0

Вы можете вернуть позицию строки по сравнению с предыдущим поиском. Например, если я сделал простой запрос: select * from table where name='aa'PHP & MYSQL - ПОЗИЦИЯ ROW

было бы вернуть

+--+----+---+ 
|id|name|cid| 
+--+----+---+ 
| 1| aa| 2| 
| 5| aa| 2| 
| 8| aa| 2| 
| 9| aa| 2| 
|10| aa| 2| 
+--+----+---+ 

Если я изменил этот запрос: select * from table where name='aa' and id='5'

было бы вернуть

+--+----+---+ 
|id|name|cid| 
+--+----+---+ 
| 5| aa| 2| 
+--+----+---+ 

в настоящее время в соответствии с первый поиск для where name='aa' есть 5 строк с and id='5', являющийся второй строкой.

Итак, есть ли способ получить положение строки по сравнению с исходным набором? Я хотел бы иметь возможность печатать «Результат 2 из 5». Я могу получить номер 5, посчитав итоговые строки. Мне просто нужно получить позицию and id='5'. Я знаю, что это вторая строка исходного набора, но я не могу найти способ вернуть эту информацию. Простите меня, если я не объясню это правильно, поскольку я не совсем знаю, как задать этот вопрос.

+1

Понятие позиции в значительной степени бессмысленны в SQL, которая построена вокруг теории множеств. Зачем вам это делать? – GordonM

+0

Помните - в SQL нет «собственного заказа». Там есть «порядок по какой-то колонке». И вам нужно решить, какой столбец использовать –

+0

Как правило, при отображении результатов из mysql, когда я показываю наборы или разбивая на страницы данные, я использую лимит и могу очень легко получить позицию строки. С приложением, над которым я сейчас работаю, мне просто нужно получить текущий, следующий и предыдущий результат, чтобы в запросе не было «предела», и ничего не было в позиции. – Mickey

ответ

2

Несмотря на то, что натуральный заказ не имеет смысла в SQL - кажется, вы имеете в виду упорядочение по столбцу id. Тогда ваша позиция просто подсчет строк с id меньшей или равной этому:

SELECT 
    *, 
    (SELECT COUNT(1) FROM `table` WHERE name='aa' AND id<=5) AS position 
FROM 
    `table` 
WHERE 
    name='aa' AND id=5 
+0

Я не заказываю по ID, но я понимаю, что ваш пример делает, и он работал именно для того, что мне нужно. Благодаря!! – Mickey

+0

Это все, что мне нужно: 'select count (1) from table, где name = 'aa' и x <= X' с' x', являющимся столбцом, который я заказываю, и 'X' значение для текущей строки мне нужно положению относительно набора, который 'select * из таблицы, где name = 'aa'' обеспечивает. – Mickey

0

Вы можете использовать первый оператор SQL, а затем, если вы желаете, чтобы искать идентификатор 5 в этом конкретном имени, которое вы могли бы использовать небольшую петлю, например:

$rows = $stmt->FetchAll() //Your Fetched Rows 
    $cnt = 1; 
    foreach ($rows as $row) { 
     if ($row['id']==$id) { 
      return $cnt 
     } else { 
      $cnt++ 
     } 
    } 

Я не уверен, если SQL способен обрабатывать более сложные ситуации, как тот, который вы описываете, но, возможно, кто-то здесь имеет больше знаний в этой области, чем я.

+0

Да, я думал о том, чтобы что-то делать по этому поводу, но я просто чувствую, что в mysql есть что-то, чтобы вернуть позицию 'и id = '5'' по сравнению с' where name =' aa'', Ик. – Mickey

+0

Здесь, я думаю, я, возможно, что-то нашел для вас: http://stackoverflow.com/questions/3614666/mysql-get-row-position-in-order-by – MineSQL