2016-07-22 84 views
0

我有兩個表,MySql的正確的SELECT語句

第一招:

things    descriptions 
------    ------------ 
First thing   First description 
Second thing   Second description 
Third thing   Third description 
Fourth thing   Fourth description 

... 

第二個:

id  products 
--  -------- 
1  First product 
2  Second product 
3  Third product 
4  Fourth product 

... 

我需要一個查詢,顯示來自前兩行第一個表格然後是第二個表格的第一行,然後是第一個表格的第二個行,然後是第二個表格的第二個行,依此類推:

things+id   prod+descr 
---------   ---------- 
First thing   First description 
Second thing   Second description 
1     First product 
Third thing   Third description 
Fourth thing   Fourth description 
2     Second product 

... 

我該怎麼辦?也許有聯盟?非常感謝你!

+0

你有多少行「聯合」? – scaisEdge

+0

如何識別哪一行是「第一」行?或「前兩個」行?如果沒有ORDER BY子句,則不能保證任何特定行將作爲「第一個」行返回。一旦你解決了這個問題,你就可以寫出一個聲明來「交錯」兩條語句的結果。但是這需要一些醜陋的SQL,除非有一些令人信服的理由必須在SQL語句中完成,否則我不會這麼做。 – spencer7593

+0

也許這個例子的例子性質是讓目標蒙上陰影,但是*爲什麼你要這樣做? – Will

回答

0

對我來說,似乎最好的做法是在您的第一個表中添加另一列,這是與您的第一張表的PK匹配的FK。有這樣的數據可以接受嗎?然後在程序中檢索它?

t2.ID t2.prod  t1.thing  t1.desc 
------ -------  --------  ------------- 
1  first prod first thing first desc 
1  first prod second thing second desc 

更新:根據您的需求

// setup count 
$countOuter = 0; 
$countInner = 0; 

//connect 
$mysqli = mysqli_connect(localhost,user,pass,database); 

// heres the tricky part you will have to make sure that your 
// tables are filled out at a ratio of 2:1 or there could be an 
// error thrown 

// not sure if this is going to be necessary for your purposes 
$sqlTest = "select * from tableOne" 
$sqlTest2 = "select * from tableTwo"  
$result1 = mysqli_query($mysqli, $sqlTest) or die (mysqli_error($mysqli)); 
$result2 = mysqli_query($mysqli, $sqlTest2) or die (mysqli_error($mysqli)); 
$rowsTableOne = mysqli_num_rows($result1); 
$rowsTableTwo = mysqli_num_rows($result2); 

// check ratio 
if(($rowsTableOne/$rowsTableTwo) == 2) 
{ 

    while($countOuter < $rowsTableOne) 
    { 
     //outer query 
     $sqlOuter = "select * from tableOne LIMIT 2"; 
     if ($count % 2 == 0) { 
     $sqlOuter .= " OFFSET ".$count; 
     } 
     $result = mysqli_query($mysqli, $sqlOuter) or die (mysqli_error($mysqli));  
     while($row = mysqli_fetch_array($result, MYSQLI_NUM)) 
     {   
      echo "<p>".$row[0]."&nbsp;".$row[1]."</p>"; 
      $countOuter++; 
     } 

     $sqlInner = "select * from tableTwo LIMIT 1"; 
     if ($countInner != 1) { 
     $sqlInner .= " OFFSET ".$countInner; 
     } 
     $result = mysqli_query($mysqli, $sqlInner) or die (mysqli_error($mysqli));  
     while($row = mysqli_fetch_array($result, MYSQLI_NUM)) 
     {   
      echo "<p>".$row[0]."&nbsp;".$row[1]."</p>"; 
      $countInner++; 
     } 
    } 
} 

這應該給你一些一般性的想法,我沒有時間來測試它,但它應該指向你在大方向。

+0

第二個表格包含公開將它們放置在屏幕上的產品在第一個表的行之間。用戶在第一個表的記錄中進行搜索,並且我想顯示第一個第二個的結果。我使用PHP來執行此操作 – Skie

+0

用戶使用的是什麼類型的程序。也就是說你用來處理數據的語言是什麼。您是否期望用戶知道sql或者您是否使用c#程序,php? – Danimal

+0

然後在第一個表格中創建一個fk是保持您正在做的事情完整性的最佳方法。你在你的php mysqli循環中操縱sql的輸出 – Danimal