выбрать данные из таблицы и вставить обратно

agruts

Новичок
выбрать данные из таблицы и вставить обратно

посоветуйте.
есть таблица, в ней 2 поля: id и data2.
Требуется получить из этих двух полей все данные, сортировать по id, поместить в массив, потом удалить из таблицы все данные
а из полученного массива поместить в таблицу скажем первые 10 рядов.
 

Gas

может по одной?
удалять все данные, а потом вставлять часть не обязательно,
delete поддерживает order by limit

p.s. но если таблица "большая", возможно и будет быстрее удалить всё и вставить небольшую часть.
 

agruts

Новичок
нет, небольшая. Примерно 10-20 строк.
т.е.
PHP:
$query = 'DELETE * FROM `table` WHERE `id`, `data2` LIMIT 10, X';
???
что ставить вместо Х?, чтобы удалились все строки начиная с 10-й?
 

Gas

может по одной?
ну ты же собирался сначала все данные получить в php - там можно узнать количество элементов. Ну или задай максимальное значение, которое позволяет тип поля `id`.
 

agruts

Новичок
PHP:
$query="DELETE a FROM #__content_frontpage"
		. "\n WHERE content_id"
		. "\n WHERE ordering"		
        . "\n ORDER BY content_id DESC LIMIT 6,999";
                $database->setQuery( $query );
                if (!$database->query()) {
                        echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n";
                }
ничего не удаляется, но и ошибок не выводится.
(в начале файла стоит
PHP:
ini_set('display_errors',1);
error_reporting(E_ALL);
)
 

Gas

может по одной?
. "\n WHERE content_id"
. "\n WHERE ordering"
тебе действительно понятен смысл этого ?

ну а почему ошибки не показываются, это смотри свою чудесную библиотеку работы с базой.

[updated]
какой-то у тебя странный способ показа ошибок, скрипт ajax'ом что-ли дёргается?
 

agruts

Новичок
думаю что понятен, но возможно я ошибся в синтаксисе.
мне нужно чтобы удалялись данные из этих двух рядов, но перед этим сортировались по убыванию из ряда content_id.

-~{}~ 19.06.08 03:52:

Решил задачу таким образом, не знаю, насколько это рационально, но работает так как мне нужно.

PHP:
$query = "SELECT COUNT(*)"
	. "\n FROM #__content_frontpage";

	$database->setQuery( $query );
	$count = intval( $database->loadResult() );
	if ($count > 10) {

$limit = $count - 10;	
	
$query="DELETE FROM #__content_frontpage"
		        . "\n ORDER BY content_id ASC LIMIT $limit";
                $database->setQuery( $query );
                if (!$database->query()) {
                        echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n";
                }
		}	else {mysql_close;}
 
Сверху