Навигация по SQL

Навигация по SQL

Извлекая набор записей с помощью SQL, можно поместить их в массив и перемещаться по записям с помощью методов current, next и т.д.
ВОПРОС: Можно ли создать многомерный массив и с помощью SQL вставить его в таблицу, так же свободно навигируя по его строкам?
Буду благодарен за ответ, указывающий направление поиска, а не за "читай мануал"...
Спасибо
 

ForJest

- свежая кровь
А среда просмотра у тебя какая? Броузер?
Можно ли создать многомерный массив и с помощью SQL вставить его в таблицу, так же свободно навигируя по его строкам?
Я себе не представляю.
может тебе поможет
[f]na_tanke[/f] - на всякий случай.
 

RomikChef

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

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

Еще будут вопросы?
 
Вопрос все же остался.
Выводить данные в броузер при помощи SQL очень просто.
Выполняем запрос. Получаем н-ное количество записей.
Помещаем в массив и при помощи цикла передвигаемся по записям в любом направлении.
ЗАПРОС ВЫПОЛНЯЕТСЯ ОДИН РАЗ!

Однако чтобы измененые данные, представляющие собой несколько строк, вставить обратно в массив, я пользуюсь циклом, который выполняет запрос UPDATE, REPLACE или INSERT СТОЛЬКО РАЗ, СКОЛЬКО ЗАПИСЕЙ надо вставить или обновить. Все, конечно, работает.
Но мне казалось, что есть более простой способ.

Логически, строки можно было бы поместить в массив, а затем применить каким то образом массив в ОДНОМ запросе.
То есть с точностью до наоборот по отношению к извлечению записей.

МОЙ ВОПРОС. Есть ли такой способ или нет.
Если нет, то перестану терзаться сомнениями и тратить время попусту.
Если есть, можно ли посмотреть пример?

Спасибо




Автор оригинала: RomikChef
"навигировать" по таблице SQL можно в десятки раз более свободно, чем по массиву в PHP, поскольку для этой навигации собственно весь язык SQL и придуман.

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

Еще будут вопросы?
 

ForJest

- свежая кровь
Способ есть.
http://phpclub.net/talk/showthread.php?s=&threadid=31786&rand=3

1. Изучи как работает REPLACE.
Тебе понадобится форма
REPLACE (id, f1, f2, ..., fn) VALUES (1, 'val1_1', 'val1_2', 'val1_n'), (45, 'val45_1', 'val45_2', 'val45_n');
2. SQL запрос - это строка.
3. С помощью PHP можно сделать строку из массива.
Что еще не понятно?

Мой вопрос. Зачем ты создал еще один топик? Или не смог найти предыдущий?

Если есть, можно ли посмотреть пример?
можно. смотри.
 
Насчет топика, было поздно, страшно устал и не понимал, что делал.

Теперь к делу.
Благодаря тебе познакомился поближе с REPLACE.
Вроде все ОК.
Но есть одна загвоздка. Поможешь ее преодолеть?
Постараюсь объяснить.

Форма ввода по виду соответствует таблице.
В форме 10 строк.
К примеру, за один сеанс работы я ввел 2 записи.
Сохранил их в таблице с помощью INSERT или REPLACE.
Далее вывел их снова, отредактировал. А заодно и вставил еще пару записей.

Чтобы работал REPLACE, в запросе надо указать PRIMARY KEY.
Однако вновь введенные записи не имеют еще первичного ключа.

Получается замкнутый круг.
Если вставить в запрос первичный ключ, будут обновляться старые записи. Но здесь REPLACE ничем не отличается от UPDATE. Сохранение же новых вызовет ошибку.
Если же первичный ключ в запросе не указывать, новые записи будут сохраняться, будет сохраняться прежний вариант старых записей и вставляться новый их вариант.
Так что здесь REPLACE не отличается от INSERT.

В чем же фокус?
 

ForJest

- свежая кровь
Однако вновь введенные записи не имеют еще первичного ключа.
Если перефразировать - вновь введенные записи имеют неопределенное значение первичного ключа. Теперь рассказываем о своих проблемах мускулу. Русский он не понимает, поэтому вместо "неопредленное значение" используем "NULL".
PHP:
REPLACE table_dest (id, f1, f2) VALUES 
(1, '1', 'Val 1'),
(2, '10', 'val2'),
(3, '30', 'val3'),
(NULL , '---', 'new'),
(NULL, '+++++', 'new3');
Предполагается что id INT NOTL NULL PRIMARY KEY AUTO_INCREMENT.
Вот и весь фокус :). Аплодисменты!.
 
АПЛОДИСМЕНТЫ!!!

Я, кажется, так пробовал. И в результате проверка результата выполнения запроса if (!$result) .... выдала ошибку. Но, возможно, ошибка была в другом.

Сегодня попробую. И если получится, будут настоящие аплодисменты.

Спасибо
 

ForJest

- свежая кровь
И в результате проверка результата выполнения запроса if (!$result) .... выдала ошибку. Но, возможно, ошибка была в другом.
Для этого есть
[m]mysql_error[/m] и echo $query - избавит тебя от множества сомнений :).
 
Сверху