簡體   English   中英

如何從mysql中的列中選擇多個記錄(行)?

[英]How to select multiple records (row) from a column in mysql?

我想從這些id中顯示四(4)項的名稱:我可以這樣做嗎?

SELECT item_name from items WHERE item_id IN ('001', '012', '103', '500')

要么

SELECT item_name from items WHERE item_id = '001' or item_id = '012' or item_id = '103' or item_id = '500'

響應所有答案

好吧,大多數答案說它有效,但它確實不起作用。 這是我的代碼:

$query = "SELECT `item_name` from items WHERE item_id IN('s001','a012','t103','p500')";

$result = mysql_query($query, $conn) or die (mysql_error());
$fetch =  mysql_fetch_assoc($result) or die (mysql_error());
$itemsCollected = $fetch['item_name'];
echo $itemsCollected;

item_id是字母數字。

您可以執行任一操作,但對於任何大型查詢,IN查詢都可以更有效地實現此目的。 我很久以前做了一些簡單的測試,發現使用IN構造的速度要快10倍。 如果你問的是語法是否正確,那么它看起來很好,除了缺少分號以完成語句。

編輯 :看起來你問的實際問題是“為什么這些查詢只返回一個值”。 那么,看看你發布的示例代碼,問題出在這里:

$fetch = mysql_fetch_assoc($result) or die (mysql_error());
$itemsCollected = $fetch['item_name'];
echo $itemsCollected;

Pax指出,你需要循環並迭代,直到沒有更多的結果被提取。 請參閱mysql_fetch_assoc的PHP手冊頁:

$sql = "SELECT item_name from items WHERE item_id IN('s001','a012')";
$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you'll
//       then create $userid, $fullname, and $userstatus
while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
    echo $row["userstatus"];
}

mysql_free_result($result);

是的,兩者都應該正常工作。 你看到的實際問題是什么?

如果你說的只返回一條記錄,請嘗試:

select item_name from items order by item_id

並檢查完整輸出以確保您有001,012,103和500的條目。

如果這兩個查詢只返回一行,我懷疑不會。

如果它們都存在,請檢查表定義,該列可能是CHAR(4)並包含其他列的空格。 您可能真的在MySQL中發現了一個錯誤,但我對此表示懷疑。

編輯后:

這是一個perl / mysql問題,而不是SQL問題: mysql_fetch_array() 返回數據集的一行,並將指針前進到下一行。

你需要做一些事情:

$query = "SELECT item_name from items WHERE item_id IN('s001','a012')";
$result = mysql_query($query, $conn) or die (mysql_error());
if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}
while ($row = mysql_fetch_assoc($result)) {
    echo $row["item_name"];
}

您還可以使用mysql_num_rows函數告訴您查詢檢索了多少行,然后使用該結果遞增for循環。 一個例子。

$num_rows=mysql_num_rows($query_results);
for ($i=0; $i <$num_rows ; $i++) { 
    $query_array[]=mysql_fetch_assoc($query_results);
}

使用mysql_fetch_assoc獲取查詢並將mysql_fetch_assoc查詢中的值分配給一個數組。 就那么簡單

$i=0;
$fullArray = array();

$query = mysql_query("SELECT name FROM users WHERE id='111' OR id='112' OR id='113' ")or die(mysql_error());

while($row = mysql_fetch_assoc($query)){
    foreach ($row as $value) {
        $fullArray[$i] = $value;
    }
    $i++;
}

var_dump($fullArray); 

echo $fullArray[0]."<br/>".$fullArray[1]."<br/>".$fullArray[2];`

我想你的ID字段必須設置為自動增量。 我有一次問題,我把自動增量改為int。 在IN字段中,如果傳遞參數以匹配自動增量變量,則只返回第一個參數,其余的則生成錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM