2016-12-09 3 views
0

Использование PHP/MySQL. Как я могу получить количество строк или позиций строки, в которой находится это имя? ПримерНомер строки, где имя расположено

________________ Row 
|__ name_|_ age _| 1 
| Joe | 30 | 2 
| Henry | 24 | 3 
| Rick | 55 | 4 
| Tom | 19 | 5 

Там нет номера строки в базе данных Поэтому я хочу код, через который я могу использовать свое имя и получить позицию строки. Нравится, если имя Тома - это будет эхом, что Том находится в строке 5. Спасибо!

+0

заказа не является составной частью таблицы. Когда вы будете работать со временем, Том может быть 5 на один прогон 3 на другой и 10 позже. У вас может быть система GENERATE номер строки для каждого запуска запроса с использованием пользовательских переменных; но, как указано ранее, заказ не гарантируется, поэтому строка № может меняться со временем. 'SELECT A. *, @rn: = @ rn + 1 as Row from TableName Перекрестное соединение (Select @rn: = 0) B order by Name' – xQbert

+0

@xQbert Могу ли я знать, как это сделать? –

+0

Строки представляют собой неупорядоченные множества. Таким образом, нет такой вещи, как «номер строки». Итак, в каком смысле Том в строке 5? – Strawberry

ответ

-1

Используя пользовательские переменные, вы можете имитировать функцию row_number.

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

SELECT A.*, @rn := @rn+1 as Row 
FROM aTable A 
CROSS JOIN (Select @rn :=0) B 
ORDER BY Name 

Working SQL fiddle

Теперь, если вы хотите постоянный идентификатор ... обязательно изменить обновление, чтобы изменить заказ на ваше поле даты, если вы хотите идентификаторы быть положенными в порядке дата, но это действительно не имеет значения, поскольку ПК, созданный таким образом (ключ Суррогата), не имеет никакого значения, кроме уникальной идентификации записи.

create table atable (
    name varchar(10), 
    age int); 

    Insert into atable values 
    ('Joe',30), 
    ('Henry',24), 
    ('Rick',55), 
    ('Tom',19); 


ALTER table atable add column ID int; 

Update atable 
INNER JOIN (
    SELECT A.*, @rn := @rn+1 as Row 
    FROM aTable A 
    CROSS JOIN (Select @rn :=0) B 
    ORDER BY Name) B 
    on atable.Name = B.Name 
and atable.Age = B.Age 
set atable.id = B.Row; 

ALTER TABLE atable MODIFY ID int NOT NULL primary key AUTO_INCREMENT; 

Working fiddle

+0

... H I J .... Nope. Это не работает – Strawberry

+0

@Strawberry Я согласен с голосом; но он отлично работает при моделировании номера строки. 5 для Тома был примером, и я указал, что этот номер может измениться при каждом прогоне (неясно, должно ли оно быть константой).Я также хотел бы указать, что если это значение должно быть последовательным в каждом прогоне, ссылка, которую я добавил в верхней части на основе комментария aynber, показывает, как это сделать. – xQbert

+0

OP не очень-то учит чему-то полезному здесь, не так ли? – Strawberry

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