2013-04-17 67 views
0
$sqlCommand2 = "SELECT blogid FROM blogtags WHERE tag='$pageid'"; 
$query2 = mysqli_query($myConnection, $sqlCommand2) or die (mysqli_error()); 
while ($row = mysqli_fetch_array($query2)) { 
    $selectedtag = $row['blogid']; 
} 

這個sql select應該給$ selectiontag 1,2,3的值,但它只給出3的值。最後一行等於pageid。任何人都可以弄清楚爲什麼它不拉動所有的行,只有最後一個?選擇多行PHP/MySQL

+1

請解釋一下你的邏輯,如何調用「$ selectedtag = $行[‘blogid’]」三次導致含3的值變量?你是否假設變量是一個堆棧?一個包? – cernunnos

回答

1

這是因爲您正在爲循環內的變量賦值。所以最後一個值會覆蓋所有其他的值。改用數組。

變化$selectedtag = $row['blogid'];$selectedtag[] = $row['blogid'];

+0

這很棒,但是如何使用$ selectedtag []中的值?我希望使用獲得的值從另一個表中獲取帖子,如下所示: $ sqlCommand =「SELECT blogid,blogtitle,content,blogtime,category,blogseourl,author FROM blog WHERE blogid ='$ selectedtag'」; – Newcastlefan

+0

@Urbane是的,它是:) – raidenace

+0

好的,謝謝@Raidenace我會仔細研究一下,你知道任何有關如何循環數組和創建逗號串聯字符串的教程的網站嗎?對不起,我對PHP很陌生。 – Newcastlefan

1

嘗試:

$selectedtag = array(); 
while ($row = mysqli_fetch_array($query2)) { 
    $selectedtag[] = $row['blogid']; 
} 

print_r($selectedtag); 
0

變化:

$sqlCommand2 = "SELECT blogid FROM blogtags WHERE tag='$pageid'"; 
     $query2 = mysqli_query($myConnection, $sqlCommand2) or die (mysqli_error()); 
        while ($row = mysqli_fetch_array($query2)) { 
        $selectedtag[] = $row['blogid']; 
        } 

$ selectedtag []陣列中的< --put值;

1

您使用最近一次迭代的行的blogid值繼續覆蓋$selectedtag

您應該使用這些值創建一個數組,或者使用循環內的值執行一些操作。

這一切都取決於你打算如何處理數據。

如果你想用搜集到的ID搜索博客,你最好創建一個更大的查詢,而不是搜索博客ID的循環和搜索博客。

你可以做這樣的事情:

SELECT id, title, content, author, date 
FROM blogs 
WHERE id IN 
    (SELECT blogid FROM blogtags WHERE tag ='$pageid') 

以上是一個非常粗略的例子與列/表命名的一些知識,但與上述查詢你應該得到與特定博客的結果標籤。

祝你好運!

0

查詢中的WHERE子句是阻止它的東西。

如果$pageid變量值3,然後將查詢結果爲:

SELECT COLUMN blogid FROM TABLE blogtags ONLY WHERE THE COLUMN tag HAS THE VALUE OF 3 

所以基本上,查詢是做正是它說。

如果你想選擇了前兩行,那麼你必須要發揮您的創意WHERE子句:

SELECT blogid FROM blogtags WHERE tag <= $pageid AND tag > $pageid - 3 

這將選擇有一個標籤是3以下,大於3的一切 - 3 = 0;

因此,標籤可以是3,2或1

編輯

我可能誤解了這個問題,但我會在這裏留下我的回答櫃面它可以幫助別人誰在它絆倒。

0

退出mysqli並使用PDO。它有你需要的一切:

$stm = $pdo->prepare("SELECT blogid FROM blogtags WHERE tag=?"); 
$stm->execute(array($pageid)); 
$rows = $stm->fetchAll(PDO::FETCH_COLUMN, 0);