2012-01-11 7 views
4

У меня есть таблицы базы данных:Как получить индекс строки?

ID name 
15 name1 
27 name2 
39 name3 

Мне нужно назначить эти ряды индексов, таких как: имя1 должны иметь индекс 0, name2 - индекс 1, name3 - индекс 2:

ID name index 
15 name1 0 
27 name2 1 
39 name3 2 

I пытаюсь сделать это с циклом:

$sub = $wpdb->get_results("SELECT t.* FROM $wpdb->terms AS t, $wpdb->term_taxonomy AS tt WHERE tt.parent = $termID AND tt.term_id = t.term_id ");   
    $i=-1; 
    foreach ($sub as $key) { 
    $i++; 
    $number[$i]=$i; 
} 

в результате этого цикла:

$number[0]=0; 
$number[1]=1; 
$number[2]=2; 

Теперь у меня есть, например, строка, которая ID равна 27. Как мне получить индекс этой строки? (Должен быть 1)

+0

Почему вы хотите индекс строки, и почему это должно быть в базе данных? – TJHeuvel

+0

Что такое '$ wpdb'? – Tadeck

+0

В СУБД, таблица представляет собой ** набор ** строк, а не упорядоченный набор. Поэтому желание неизменного порядка строк может впоследствии привести к неожиданностям. Если вы хотите, чтобы в естественном порядке использовался первичный ключ автоинкремента. – Benoit

ответ

2

Вы можете использовать Еогеасп как:

foreach ($sub as $key => $value) { 
} 

Где $ ключ индекс вы хотите.

1

Я не использую WordPress сам, но я хотел бы предложить вам попробовать следующее, чтобы увидеть, что происходит:

$sub = $wpdb->get_results("SELECT t.* FROM $wpdb->terms AS t, $wpdb->term_taxonomy AS tt WHERE tt.parent = $termID AND tt.term_id = t.term_id ");   
$i=-1; 
foreach ($sub as $key) { 
print_r($key); 
} 

Это будет распечатать данные, которые вы получаете обратно из запроса, так что вы можете решить, Что с этим делать. Если вы все еще застряли, отправьте результаты здесь.

0

Вам не нужен индекс строки, сохраните его в базе данных. Существует специальный флаг, когда вы настраиваете структуру MySQL db для автоматического увеличения. Невозможно получить индекс строки в базе данных, потому что нет индексов строк, все данные, которые вы видите в средстве просмотра базы данных, являются результатом поиска без параметров. Если вам это действительно нужно, вы можете просто получить все данные в таблице и вручную получить свой идентификатор строки, как сказал ign. (Используйте ключ foreach и значение)

1

Ваш вопрос, похоже, не связан с SQL. Как и в SQL, если у вас уже есть id(27), вы должны использовать это, а не значение индекса.

Итак, я предполагаю, что вы ищете подходящую строку на PHP, если ее значение id, возможно, пользователем. Итак, ваш вопрос: how to find a record in an unordered array.

  • Вы можете перебрать все записи, пока вы не получите матч
  • Вы можете создать упорядоченный набор соответствующий идентификатор индекса (например в виде бинарного дерева)
  • Вы можете создать соответствующий хэш-таблицы идентификатор индекса

Чем быстрее поиск, тем больше памяти он будет использовать. Какой конец спектра выбрать, зависит от ваших потребностей и ограничений.

1

Попробуйте что

SET @rowId :=0; 
SELECT @rowId := @rowId + 1 as rowid , fieldName from tableName 
Смежные вопросы