2009-06-06 12 views
0

私はこのテーブルをMySQL上に持っています。私はuser_id s 1と私はPHPでそれを行うにはどうすればよい2.MySQL:特定の行を取得

 
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 

ためport番号を照会したいですか?

ありがとうございました!

+0

これはひどく設計されたデータベースです...それを制御できますか?もしそうなら、私はスキーマの変更が最良のアイデアだと思う。 –

+0

実際にはwordpress、wordpress usermetaデータベーステーブルから、私は別のサーバと通信するために少数の行を取得する必要があります。 –

答えて

3

非常に単純なビットが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(); 
?> 
+2

$ row [3]を使って "SELECT *"と一緒に少し冒険しています... – Tomalak

+0

100%トマラクを怒らせて修正します。 –

+0

それは良いです、+1。 :-)私はfetch_assoc()と$ row ['meta_value']を使用していましたが、それは好みの問題です。私からの – Tomalak

1
SELECT * FROM table 
WHERE user_id = 1 
    AND meta_key = 'port' 

user_id = 2のために同じことを行いますかあなたは両方のユーザーのポートを取得したい場合は、同時に1つのクエリで次の操作を行います。

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

この答えはちょうどSQL-一部を反射する - 私はあなたと仮定します目的のMySQLライブラリ(ext/mysqlext/mysqli、またはext/PDO)を使用してMySQLサーバにクエリを送信する方法を理解しています。サンプルコードの

-2

からの例に基づいて動作するはずです私の代わりに、上記提案のもので、これを使用すると思います:

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'); 
?> 
+0

-1。 "SELECT *"は良い習慣ではありません。 – duffymo

+0

-1は、 "sprintf(sqlstring)"ではなく "SELECT *"、IMHOです。 – Tomalak

関連する問題