2012-12-03 80 views
1

沒關係,對於浪費你的時間,仔細檢查後發現我的實時數據中確實沒有這種情況。當我第一次問我的客戶時,應該有一些他們。他們在哪裏錯了,我會責怪MySQL。查詢在不同的服務器上返回奇怪的和不同的結果

在我的應用程序下面的查詢運行的情況:

SELECT s.*, c.company_name, c.kvk_number 
FROM wp_kvk_statements as s 
LEFT JOIN wp_kvk_companies as c ON s.company_id = c.id 
WHERE s.status < 2 AND c.status = 1 
ORDER BY company_id, s.year DESC 

問題

在我的dev的服務器此查詢正確返回的所有行狀態在wp_kvk_statements小於2(即0或1)。對於wp_kvk_companies表中狀態爲1的公司。

但是在我的活動服務器上,只返回wp_kvk_statements中狀態爲1的行,就好像c.status = 1被解釋爲錯誤。

問題

爲什麼會出現這種情況,我怎麼能解決這個問題。

背景信息

開發服務器的MySQL出口(這是它的工作原理):

-- phpMyAdmin SQL Dump 
-- version 3.4.10.1 
-- http://www.phpmyadmin.net 
-- 
-- Host: localhost 
-- Generation Time: Dec 03, 2012 at 01:22 PM 
-- Server version: 5.5.20 
-- PHP Version: 5.3.10 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `wp_kvk_companies` 
-- 

CREATE TABLE `wp_kvk_companies` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `industry_id` int(11) NOT NULL, 
    `company_name` char(255) CHARACTER SET utf8 NOT NULL, 
    `kvk_number` char(12) NOT NULL, 
    `status` int(11) NOT NULL DEFAULT '1', 
    `last_crawled` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `wp_kvk_statements` 
-- 

CREATE TABLE `wp_kvk_statements` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `company_id` int(11) NOT NULL, 
    `year` int(4) NOT NULL, 
    `bought` tinyint(1) NOT NULL, 
    `analyzed` tinyint(1) NOT NULL, 
    `status` int(11) NOT NULL, 
    `added` datetime NOT NULL, 
    `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `updated_by_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `unique` (`company_id`,`year`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

Live服務器的MySQL出口(這是它被打破):

-- phpMyAdmin SQL Dump 
-- version 3.5.2.2 
-- http://www.phpmyadmin.net 
-- 
-- Host: localhost 
-- Generation Time: Dec 03, 2012 at 02:25 PM 
-- Server version: 5.5.9 
-- PHP Version: 5.3.17 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 

-- 
-- Database: `deb51918_annuall` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `wp_kvk_companies` 
-- 

CREATE TABLE `wp_kvk_companies` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `industry_id` int(11) NOT NULL, 
    `company_name` char(255) CHARACTER SET utf8 NOT NULL, 
    `kvk_number` char(12) NOT NULL, 
    `status` int(11) NOT NULL DEFAULT '1', 
    `last_crawled` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `wp_kvk_statements` 
-- 

CREATE TABLE `wp_kvk_statements` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `company_id` int(11) NOT NULL, 
    `year` int(4) NOT NULL, 
    `bought` tinyint(1) NOT NULL, 
    `analyzed` tinyint(1) NOT NULL, 
    `status` int(11) NOT NULL, 
    `added` datetime NOT NULL, 
    `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `updated_by_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `unique` (`company_id`,`year`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 
+0

您是否嘗試過扭轉測試?在s.status <2之前c.status = 1? – dmaij

+1

你能提供一些行的例子嗎? (包括和排除) –

回答

0

該查詢執行它應該執行的操作。順便提一下,LEFT在那裏沒用,連接轉換爲INNER連接,因爲WHERE類包括c.status = 1條件。所以,你的查詢等效於:

SELECT s.*, c.company_name, c.kvk_number 
FROM wp_kvk_statements as s 
INNER JOIN wp_kvk_companies as c ON s.company_id = c.id 
WHERE s.status < 2 AND c.status = 1 
ORDER BY company_id, s.year DESC ; 

你進一步說:

做「但是我活的服務器只有其中1返回在wp_kvk_statements狀態行,......在」您有任何行在有wp_kvk_statements.status不等於1的活服務器中?那另外在wp_kvk_companies表中有相關​​的行c.status=1?我想不是。我猜不是。我的第二個猜測是你錯誤地解釋了查詢應該返回的內容(左/內亂可能?)。

如果實時服務器和測試服務器返回不同的結果,那麼您要麼在兩臺服務器上擁有不同的數據,要麼正在運行(稍微)不同的查詢。

+0

謝謝,看我的編輯。對不起,浪費你的時間。 – Wilgert

相關問題