1

外部ソースから情報をダウンロードし、入力したクエリごとに 1 ページの SQL を提供するプログラムがあります。通常、各タイトルには 3 ~ 6 つのクエリが関連付けられています。各 SQL ページは新しいテーブルをロードし、すべてのテーブルに同じ列があります。以下は、Title Automotive に関連する 6 つのクエリのうちの 2 つである、UsedCar および NewCar クエリの結果の例です。

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;

これらはデータベースにロードされます。

私の問題は、この情報を私のウェブページに取り込もうとすることです。自動車のカテゴリを除いた独自の情報を表示するリンクを作成したいと考えています。1 つのテーブルからこれを行うことができますが、複数のテーブルに対してこれを行うことができませんでした。問題を調査して、DISTINCT と UNIQUE を選択してみました。テーブルの JOIN と UNION を行うのと同様に、おそらく私が忘れている非常にばかげたものだと確信しています。

以下は、2 つのテーブルから描画しようとするように変更され、「レコードが見つかりません」を返すように変更された 1 つのテーブルから描画するために使用する PHP です。

<?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>";
}

?>

長い投稿で申し訳ありません..:)

4

1 に答える 1

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
于 2012-09-12T14:52:03.537 に答える