Как выбрать несколько записей (ряд) из столбца в MySQL? - PullRequest
4 голосов
/ 13 февраля 2009

Я хочу отобразить четыре (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 буквенно-цифровая.

Ответы [ 5 ]

10 голосов
/ 13 февраля 2009

Вы можете сделать любой из них, но запрос IN гораздо эффективнее для этой цели для любых больших запросов. Я давно провел простое тестирование, которое показало, что использовать для этого конструкцию IN примерно в 10 раз быстрее. Если вы спрашиваете, правильный ли синтаксис, то да, он выглядит нормально, за исключением пропущенных точек с запятой для завершения оператора.

РЕДАКТИРОВАТЬ : Похоже, что реальный вопрос, который вы задавали, был «почему эти запросы возвращают только одно значение». Ну, глядя на пример кода, который вы разместили, проблема здесь:

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

Вам нужно перебирать и повторять до тех пор, пока больше не будет результатов для извлечения, как указал Пакс . См. Справочную страницу PHP для mysql_fetch_assoc :

$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);
4 голосов
/ 13 февраля 2009

Да, оба должны работать нормально. Какую реальную проблему вы видите?

Если, как вы говорите, возвращается только одна запись, попробуйте:

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"];
}
0 голосов
/ 16 августа 2012

Используйте 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];`
0 голосов
/ 12 июля 2012

Вы также можете использовать функцию 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);
}
0 голосов
/ 23 августа 2011

Ваше поле идентификатора должно быть установлено с автоматическим приращением, я думаю. у меня были проблемы с этим один раз, и я изменил автоинкремент на int. в поле IN, если вы передадите параметры для сопоставления с переменной автоинкремента, вы вернете только первый параметр, оставшийся вызовет ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...