2012-09-12 35 views
1

我有一個程序,用於從源和源外下載信息,併爲我輸入的每個查詢提供一個sql頁面。正常情況下,有3 - 6個查詢關聯與每個標題。 每個sql頁面都會加載一個新表格,並且所有表格都有相同的列。以下是Used Automotive和NewCar查詢結果的示例,它是Title Automotive涉及的6個查詢中的2個。如何使用mysql從多個表中選擇具有相似列的唯一行

CREATE TABLE IF NOT EXISTS NewCar(Name char(255) DEFAULT NULL, 
Phone char(255) DEFAULT NULL, 
Address char(255) DEFAULT NULL, 
Website char(255) DEFAULT NULL, 
Email char(255) DEFAULT NULL, 
Category char(255) DEFAULT NULL, 
UNIQUE KEY Name (Name)) 
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

LOCK TABLES NewCar WRITE; 
REPLACE INTO NewCar VALUES('whats it Auto','1-888-555-7327','63 Beech Hill Rd, Beechville, NS B1G 2R9','http://www.whatsit.com','','New Car Dealers'); 
REPLACE INTO NewCar VALUES('Hugh\'s Chev','888-555-6990','376 Main St, lower bohemia, NS B5G 2D6','','','New Car Dealer'); 
REPLACE INTO NewCar VALUES('Be It Motors Ltd','866-555-2771','90 Main St, Upper Bohemia, NS B9G 2K8','','','New Car Dealers'); 
UNLOCK TABLES; 


CREATE TABLE IF NOT EXISTS UsedCar(Name char(255) DEFAULT NULL, 
Phone char(255) DEFAULT NULL, 
Address char(255) DEFAULT NULL, 
Website char(255) DEFAULT NULL, 
Email char(255) DEFAULT NULL, 
Category char(255) DEFAULT NULL, 
UNIQUE KEY Name (Name)) 
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

LOCK TABLES UsedCar WRITE; 
REPLACE INTO UsedCar VALUES('whats it Auto','1-888-555-7327','63 Beech Hill Rd, Beechville, NS B1G 2R9','http://www.whatsit.com','','Used Car Dealers'); 
REPLACE INTO UsedCar VALUES('Hugh\'s Chev','888-555-6990','376 Main St, lower bohemia, NS B5G 2D6','','','Used Car Dealer'); 
REPLACE INTO UsedCar VALUES('Be It Motors Ltd','866-555-2771','90 Main St, Upper Bohemia, NS B9G 2K8','','','Used Car Dealers'); 
UNLOCK TABLES; 

這些然後被加載到我的數據庫。

我的問題是試圖將這些信息提取到我的網頁中。我想創建一個鏈接,顯示汽車排除類別下的獨特信息。我可以從一張桌子上做到這一點,但無法爲多張桌子做到這一點。 我試圖研究這個問題,並嘗試選擇DISTINCT和UNIQUE。以及做表JOIN和聯盟 - 我相信它可能是我忘記了很愚蠢的東西。

以下是我用於從單個表中繪製的PHP,該表已被修改爲嘗試從2個表中繪製並返回「找不到記錄」。

<?php 
$result = mysql_query("SELECT DISTINCT Name FROM (SELECT * FROM UsedCar UNION SELECT*FROM NewCar) ORDER BY name ASC"); 
if(mysql_num_rows($result) == 0){ 
echo("no records found"); 
} ELSE { 
echo "<table border='0'; table id='address'> 
<tr> 
<th>Name</th> 
<th>Phone</th> 
<th>Address</th> 
<th>Website</th> 
</tr>"; 

while($row = mysql_fetch_array($result)) 

    { 
    echo "<tr>"; 
    echo "<td>" . $row['Name'] . "</td>"; 
    echo "<td>" . $row['Phone'] . "</td>"; 
    echo "<td>" . $row['Address'] . "</td>"; 
    echo '<td><a href="' . $row['Website'] . '" target="_self\">' . $row["Website"] . '</a></td>'; 
    echo "</tr>"; 

    } 
echo "</table>"; 
} 

?> 

對不起,長職位.. :)問題的

+0

稍微偏離主題,但爲什麼不能有一個參考表指出它是否是一個單一的經銷表使用過,新的還是兩者? – Kermit

+0

實際上汽車需要新車,二手車,輪胎,newparts,usedparts等。我將有鏈接,將它分解成類別分支。 – Simmy

+0

請不要將mysql_ *函數用於新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。看到[紅色框](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你在意學習,這裏是[很好的PDO教程](http://goo.gl/vFWnC)。 –

回答

2

部分是你的SQL語法,你缺少的子選擇

您沒有別名查詢別名(SQL Fiddle ):

SELECT DISTINCT Name 
FROM 
(
    SELECT * 
    FROM UsedCar 
    UNION  
    SELECT * 
    FROM NewCar 
) 
ORDER BY name ASC 

有了別名作品(見SQL Fiddle

SELECT DISTINCT Name 
FROM 
(
    SELECT * 
    FROM UsedCar 
    UNION  
    SELECT * 
    FROM NewCar 
) x 
ORDER BY name ASC 

但是如果你只想要的名字,那麼你就不需要子查詢(見SQL Fiddle):

SELECT name 
FROM UsedCar 
UNION  
SELECT name 
FROM NewCar 
+0

謝謝我在我的網站上試過這個,得到了「沒有找到記錄」,但是當我進入mysql並嘗試使用相同的語法時,我只收到了所有記錄,但只有名字。也許問題出在我的php代碼上,但它可以在一張桌子上正常工作.. – Simmy

+0

謝謝bluefeet - 我玩了一下,猜測我不明白你的意思是別名 - 當我添加'x'時,一切都變得很好..現在我所要做的就是找出語法來刪除那些像手機#的一些公司有他們的名字在不同的格式,但他們的電話號碼永遠不會改變..再次感謝:) – Simmy

+0

@Simmy我是很高興你知道了。如果此答案有幫助,請務必通過左側的複選標記標記爲已接受......這將有助於未來的訪問者。 :) – Taryn

相關問題