За последние 24 часа нас посетили 21011 программистов и 1630 роботов. Сейчас ищут 1156 программистов ...

Текущая запись в массиве

Тема в разделе "PHP и базы данных", создана пользователем bucho, 27 окт 2007.

  1. bucho

    bucho Активный пользователь

    С нами с:
    27 окт 2007
    Сообщения:
    5
    Симпатии:
    0
    Здраствуйте. Кричу о помощи, ибо перерыл весь интернет и не нашел решения

    К примеру есть база test с полями nid, ddatetime, npole, ctext
    1 12.01.2007 1 eee
    2 13.01.2007 0 ccc
    3 15.01.2007 0 aaa
    4 16.01.2007 1 ddd
    5 17.01.2007 0 fff
    6 18.01.2007 1 ggg

    Выполняется запрос select * from test where npole='1' group by ddatetime
    соответсвенно выйдут записи

    6 18.01.2007 1 ggg
    4 16.01.2007 1 ddd
    1 12.01.2007 1 eee

    Но как приписать им виртуальные номера а не id. Прошу не предлогать foreach, так как база большая.... (в скобках-"виртуальные номера")
    (1) 6 18.01.2007 1 ggg
    (2) 4 16.01.2007 1 ddd
    (3) 1 12.01.2007 1 eee

    Должна быть какая то функция на подобии array_search,array_walk - которая могла бы вытащить номер "виртуальной-выбранной-текущей" записи.
    Для чего это нужно поясняю
    Например нужно узнать какой "виртуальный" номер имеет запись с id=1 в этой самой выборке

    С уважением Игорь
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Если ты собрался все записи из своей большой базы выбирать, то никакие подобные array_walk() функции тебе не друзья.

    Код (Text):
    1. $query = (массив записей);
    2. array_unshift($query);
    3. unset($query[0]);
    4. // теперь $query это массив первый ключ которого 1, а не 0
    P.S. Есть ещё array_map().
     
  3. bucho

    bucho Активный пользователь

    С нами с:
    27 окт 2007
    Сообщения:
    5
    Симпатии:
    0
    Что то не вразумил для чего мне array_unshift???
    array_unshift() присоединяет переданные элементы в начало массива array. Заметьте, что список элементов присоединяется как единое целое, и присоединяемые элементы располагаются в том же порядке..... (описание)

    Что мне это дает? Ведь нужно найти в так называемом курсоре запись с номером id=1, и для него будет виртуальный номер 3, для id=4 будет 2, id=6 будет 1
     
  4. Mavir

    Mavir Guest

    [sql]SET @x=0;
    SELECT @x:=@x+1, t.* FROM test t WHERE npole='1' GROUP BY ddatetime[/sql]
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    bucho а какую цель преследуете?
     
  6. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    Создайте еще один столбец в вашей таблице и вводите туда id по вашему алгоритму :D
     
  7. Mavir

    Mavir Guest

    Тогда уже для каждого возможного условия в WHERE по столбцу :)
     
  8. bucho

    bucho Активный пользователь

    С нами с:
    27 окт 2007
    Сообщения:
    5
    Симпатии:
    0
    хорошо создам столбец, а как мне его заполнять и потом еще искать??? Ведь заполняться будет каждый раз по разным условиям выборки и тем более что будет лапатить большую базу, пока сикл не умрет....

    SET @x=0;
    SELECT @x:=@x+1, t.* FROM test t WHERE npole='1' GROUP BY ddatetime
    Это я уже давно пробывал, но почему то у меня не срабатывало..... (возможно еще раз поробую), если сработает, то как вытащить этот Х зная ID????

    Спасибо всем
     
  9. Mavir

    Mavir Guest

    [sql]SET @x=0;
    SELECT num FROM (SELECT @x:=@x+1 AS num, t.id FROM test t WHERE npole='1' GROUP BY ddatetime) a WHERE id = 15;[/sql]
     
  10. bucho

    bucho Активный пользователь

    С нами с:
    27 окт 2007
    Сообщения:
    5
    Симпатии:
    0
    SET @x=0; на этом месте происходит ошибка

    SELECT num FROM (SELECT @x:=@x+1 AS num, t.id FROM test t WHERE npole='1' GROUP BY ddatetime) a WHERE id = 15; здесь если даже и отрабатывает при не установленном SET @x=0;, то поле num всегда 0....

    Извените за задержку....
    Может есть другой запрос
     
  11. Mavir

    Mavir Guest

    Версия MySQL? Старые версии не поддерживают работу с переменными

    P.S. На 5-м работает на "ура"
     
  12. bucho

    bucho Активный пользователь

    С нами с:
    27 окт 2007
    Сообщения:
    5
    Симпатии:
    0
    MySql 4..., а других способов нет для этого?
    Возможно есть иные способы для этого, которые работают и в 4 SQL