2009-06-06 8 views
0

J'ai cette table sur MySQL. Je veux interroger le nombre port pour user_id s 1 et 2.MySQL: Obtenir une certaine ligne

 
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 

Comment puis-je le faire en PHP?

Merci!

+0

C'est une base de données mal conçue ... Avez-vous le contrôle dessus? Si oui, je pense que changer le schéma serait la meilleure idée. –

+0

en fait de wordpress, wordpress table de base de données usermeta, donc j'ai besoin d'obtenir quelques lignes pour communiquer avec un autre serveur. –

Répondre

3

Un très simple morceau de code exemple devrait fonctionner sur la base par exemple de 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

en utilisant $ row [3] est un peu aventureux en conjonction avec "SELECT *" ... – Tomalak

+0

100% aggreed Tomalak je vais le corriger. –

+0

C'est mieux, +1. :-) J'aurais utilisé fetch_assoc() et $ row ['meta_value'], mais c'est une question de goût. – Tomalak

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

Faites la même chose pour user_id = 2 ou si vous souhaitez récupérer les ports des deux utilisateurs font simultanément ce dans une requête:

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

Cette réponse reflète simplement la partie SQL - Je suppose que vous savoir comment envoyer des requêtes à un serveur MySQL en utilisant la bibliothèque MySQL souhaitée (ext/mysql, ext/mysqli ou ext/PDO).

-2

j'utiliser ce lieu de celles proposées ci-dessus:

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

Cela facilitera également et plus joli lorsque vous travaillez avec des tableaux, etc.:

<?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! N'oubliez pas de vérifier l'entrée si la matrice des utilisateurs n'est pas sûre. Par exemple si c'est le résultat d'une entrée utilisateur. Dans ce cas, vous aimeriez faire quelque chose de similaire à ceci:

<?php 
$users = array_map($users, 'mysql_real_escape_string'); 
?> 
+0

-1 de moi. "SELECT *" n'est pas une bonne pratique. – duffymo

+0

Le -1 est plutôt pour le "sprintf (sqlstring)" que pour le "SELECT *", à mon humble avis. – Tomalak

Questions connexes