[英]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.