2016-03-13 54 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中的行必须是删除类型的东西if(product_list.NO> count1.products){DELETE ROWS IN products_list } –

+0

ofcourse produt_list.NO是表中的最大值,谢谢:) –

回答

0

我认为你正在寻找此查询:

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

添加的LIMIT 1只是一种安全措施,如果你将有产品以上记录。

请注意,没有真正的需要首先选择MAX(NO)。如果没有要删除的内容,则运行删除语句并不会造成伤害。那么它什么都不会做。

+0

这么简单,但不是我想的那个......非常感谢 –

+0

你能帮助我吗?有可能做到这一点,但这次用INSERT?这是关于以类似的方式创建记录? –

+0

当然,只要问一个新问题,并准确描述您需要的内容:您拥有的表格,您尝试过的代码以及期望的结果。如果你愿意,当你发布你的问题时,你可以在这里留言,我会看看它。 – trincot

相关问题