MySQL: получить определенную строку - PullRequest
0 голосов
/ 06 июня 2009

У меня есть эта таблица на MySQL. Я хочу запросить номер port для user_id s 1 и 2.

umeta_id  user_id  meta_key     meta_value
------------------------------------------
       1        1  nickname     admin
       8        1  userDir      D
       9        1  port         8080
      10        1  paymentopt   bankin
      13        2  port         8081
      20        2  a_renew      1240098300
      21        2  userDir      D
      22        2  paymentopt   paypal

Как мне это сделать в PHP?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 06 июня 2009

Очень простой пример кода должен работать на основе примера из http://uk.php.net/manual/en/mysqli-result.fetch-row.php

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT `umeta_id`, `user_id`, `meta_key`, `meta_value` FROM TableName WHERE (`user_id` = 1 OR `user_id` = 2) AND (`meta_key` = 'port')"; //You will need to change TableName to whatever your table is called.

if ($result = $mysqli->query($query)) {

    /* fetch object array */
    while ($row = $result->fetch_row()) {
        echo $row[3];
    }

    /* free result set */
    $result->close();
}

/* close connection */
$mysqli->close();
?>
1 голос
/ 06 июня 2009
SELECT * FROM table  
WHERE user_id = 1
    AND meta_key = 'port'

Сделайте то же самое для user_id = 2 или, если вы хотите получить порты обоих пользователей одновременно, сделайте это в одном запросе:

SELECT * FROM table 
WHERE (user_id = 1 OR user_id = 2)
    AND meta_key = 'port'

Этот ответ отражает только часть SQL - я предполагаю, что вы знаете, как отправлять запросы на сервер MySQL, используя нужную библиотеку MySQL (ext/mysql, ext/mysqli или ext/PDO).

0 голосов
/ 06 июня 2009

Я бы использовал это вместо предложенных выше:

SELECT * FROM table WHERE user_id IN (1,2) AND meta_key = 'port'

Это также облегчит работу с массивами и т. Д .:

<?php
$users = array(1,2,3,4,5);
$sql = sprintf("SELECT * FROM table WHERE user_id IN (%s) AND meta_key = 'port'", implode(",", $users));
?>

NB! Не забудьте проверить ввод, если массив пользователей не является безопасным. Например, если это результат ввода пользователя. В этом случае вы хотели бы сделать что-то похожее на это:

<?php
$users = array_map($users, 'mysql_real_escape_string');
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...