2016-03-13 3 views
1

мне нужна ваша помощь, чтобы ускорить мой MySQL запроскороткий PHP/MySQL запросов для удаления, где две таблицы выбрать

мой взгляд PHP код выглядит следующим образом:

$product = query("SELECT `id`, `productname`, MAX(NO) FROM `product_list` WHERE 1"); 
$count1 = query("SELECT `products` FROM `count1` WHERE 1"); 

list($noproduct) = mysql_fetch_array($count1); 

if (mysql_num_rows($product) > $noproduct) { 

    query("DELETE FROM `product_list` WHERE `NO` > ".$noproduct."); 

} 

и MySQL базы выглядит следующим образом:

CREATE TABLE `count1` (
    `id` int(11) NOT NULL, 
    `products` int(5) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `count1` (`id`, `products`) VALUES 
(1, 9); 

CREATE TABLE `product_list` (
    `id` int(11) NOT NULL, 
    `productname` varchar(55) NOT NULL, 
    `NO` int(5) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `product_list` (`id`, `productname`, `NO`) VALUES 
(1, 'product1', 1), 
(2, 'product2', 2), 
(3, 'product3', 3), 
(4, 'product4', 4), 
(5, 'product5', 5), 
(6, 'product6', 6), 
(7, 'product7', 7), 
(8, 'product8', 8), 
(9, 'product9', 9), 
(10, 'product10', 10), 
(11, 'product11', 11); 

ALTER TABLE `product_list` 
    ADD PRIMARY KEY (`id`); 

ALTER TABLE `count1` 
    ADD PRIMARY KEY (`id`); 


ALTER TABLE `count1` 
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; 


ALTER TABLE `product_list` 
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12; 

Мой код выполняет три запроса каждый раз, когда страница перезагружается, и мне нужно сделать только один запрос.

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

Delete from product_list where (select product_list) > (select count1) 
+0

Что вы ожидаете от таблицы 'count1'? Я думаю, что у вас серьезное непонимание того, что делает ваш код. – mkasberg

+0

в таблице «count1» задано фиксированное значение, а если вторая таблица имеет более высокий максимум (NO), то строки в product_list должны быть удалены как-то, если (product_list.NO> count1.products) {DELETE ROWS IN products_list } –

+0

forcourse produt_list.NO MAX значение из таблицы, спасибо :) –

ответ

0

Я думаю, что вы ищете этот запрос:

DELETE FROM product_list 
WHERE NO > (SELECT products FROM count1 LIMIT 1) 

Добавление LIMIT 1 является только мерой безопасности, в случае, если бы более одной записи в продукции.

Обратите внимание, что нет необходимости сначала выбирать MAX(NO). Это не помешает запустить инструкцию delete, если нечего удалять. Тогда он ничего не сделает.

+0

так просто, но не думаю, что ... спасибо большое –

+0

вы можете мне помочь? Можно сделать то же самое, но на этот раз с INSERT? Речь идет о создании записей аналогичным образом? –

+0

Несомненно, просто задайте новый вопрос и точно укажите, что вам нужно: таблицы, которые у вас есть, код, который вы пробовали, и каков желаемый результат. Если вы хотите, вы можете оставить сообщение здесь, когда вы разместили свой вопрос, и я посмотрю на него. – trincot

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