2013-01-09 36 views
0

在PHP/MySQL中,我是一個很不錯的選擇,但是,現在我需要從兩個相關的表中獲取信息。 我對我需要做的事情做了很多研究,但似乎無法弄清楚我出錯的地方。我的問題出在哪裏?

問題:如何從短鏈接表中獲取與shortlink_analytics中的短鏈接有關的鏈接?

我得到的錯誤:警告:mysql_fetch_array()預計參數1是資源,布爾給

我的表如下:

Shortlinks表

ID

shortlink

鏈接

createdTime

createdBy

shortlink_analytics表

shortlink

引用

hitTime

USERIP

的userAgent

到目前爲止,我已經嘗試的代碼是:

$linecount = 1; 
//$mostPop is where I think I have gone wrong and this is where the warning refers to 
$mostPop = "SELECT shortlink, COUNT(shortlink) FROM shortlink_analytics JOIN shortlinks ON shortlink_analytics.shortlink = shortlinks.shortlink GROUP BY shortlink ORDER BY COUNT(shortlink) DESC LIMIT 10"; 
      $loadPop = mysql_query($mostPop); 
      echo '<table id="middleIndex">'; 
      echo '<tr><td class = "overFlow"><h2>Most Popular Shortlink</h2></td></tr>'; 
      echo '<tr>'; 
      while($row = mysql_fetch_array($loadPop)) 
      { 
        echo '<td class = "overFlow">'.$row[1].' visits - <a href = "info.php?link='. $row['shortlink'] .'">hud.ac/' . $row['shortlink'] . '</a></td>'; 
        echo '</tr>'; 
        $linecount++; 
      } 
      echo '<tr id="indexMiddle"><td id="hand" class = "overFlow"><a onclick="indexMostPopular()">View More</a></td></tr>'; 
       echo '</table>'; 

我beleive,我沒有背後如何使用JOIN或者是參數的透徹理解不夠需要形成一個成功的加入。

+2

使用'mysql_error'找出SQL錯誤是從那裏工作。但請注意,mysql_ *函數已被棄用,如果可能的話不應該被真正使用。您應該考慮使用mysqli或PDO。 –

+3

只是幾個筆記。 a)使用mysql_ *系列函數非常不鼓勵,因爲它們不再被真正維護,並且除了名字之外都被棄用。 YOu可能想改爲使用PDO或mysqli。b)不建議混合顯示邏輯(回顯HTML標記)和應用程序邏輯(數據庫查詢等),因爲它可能導致代碼難以維護。 – GordonM

+0

歡呼傢伙,我明白mysql_ *現在已經貶值了,我正在將我的知識轉移到一個新的約定,感謝您的反饋! –

回答

1

你有兩個表中的shortlink都會造成不明確的情況。試試這個SQL語句

$mostPop = "SELECT shortlink_analytics.shortlink AS short, 
COUNT(shortlink_analytics.shortlink) AS shortcount, 
(SELECT link FROM shortlinks 
WHERE shortlinks.shortlink = shortlink_analytics.shortlink) AS shLink 
FROM shortlink_analytics 
JOIN shortlinks ON shortlink_analytics.shortlink = shortlinks.shortlink 
GROUP BY shortlink_analytics.shortlink 
ORDER BY COUNT(shortlink_analytics.shortlink) DESC LIMIT 10"; 
+0

然後我如何獲得鏈接的輸出到我的while循環內的屏幕,我試過使用:....'。$ row ['link']。'and ...'。$ row ['shortlinks.link']。'..但是當我試過它們都沒有工作,因爲它們是未定義的? –

+0

@SamStreet - 我在查詢中添加了** **,所以你可以從新的名字得到它現在像$ row ['short']和$ row ['shortcount'] –

+0

如何獲得**鏈接* *來自另一張表格的信息並輸出它,雖然我可以獲得短信和短信的信息,但是它也是我希望顯示的來自短鏈接的信息。 (抱歉不斷詢問) –

0

試試這個(在mysql中運行此查詢,如果它工作在PHP腳本中添加它)

SELECT 
    shortlink_analytics.shortlink, COUNT(shortlink_analytics.shortlink) 
FROM 
    shortlink_analytics 
INNER JOIN 
    shortlinks ON shortlink_analytics.shortlink = shortlinks.shortlink 
GROUP BY shortlink_analytics.shortlink 
ORDER BY COUNT(shortlink_analytics.shortlink) DESC 
LIMIT 10 

並檢查mysql_effected_rows()函數來檢查查詢將是返回一些行或不