2010-04-25 7 views
0

Comment utilisez-vous une variable php (tableau) dans une instruction select mysql?Comment utiliser les variables php (tableaux) dans les instructions select de mysql?

Je conçois un site d'enchères et travaille actuellement sur une page qui permet aux gens d'afficher une liste de toutes les offres actuelles pour un article. Je veux afficher 3 colonnes:

  1. amountbid - le montant que chaque soumissionnaire a une offre pour l'élément (tenue à tblbid)

  2. bidderid - l'id de chaque soumissionnaire qui a une offre (dans tbluser)

  3. total_positivity_feedback - combien d'utilisateurs ont laissé des commentaires positifs pour le soumissionnaire (calculé à partir tblfeedback)

pour trouver les colonnes 'amount' et 'bidderid' je passe le paramètre URL d'essayid de la page précédente. Cela fonctionne bien. En dépit de cela, je ne peux pas afficher la colonne total_positivity_feedback pour les différents utilisateurs qui ont fait chaque enchère.

Ma requête mysql ressemble à ceci:

select 
tblbid.bidderid, 
tblbid.amount, 
(select count(tblfeedback.feedbackid) from tblfeedback WHERE tblfeedback.writerid = "ARRAY VARIABLE GOES HERE") AS total_positivity_feedback FROM tblbid WHERE tblbid.essayid = $essayid_bids 

Je suppose que la seule façon d'y arriver est de faire la variable contient les années bidderid de ces personnes qui ont soumissionné pour cet essai particulier? Je n'arrive pas à trouver comment faire ça?!?

Un grand merci pour votre aide

Répondre

0

Il est pas évident de votre problème où l'ID Writer doit provenir . Quand vous dites "tableau", voulez-vous dire un tableau PHP ou faites-vous référence à plusieurs valeurs stockées dans des lignes dans la base de données? Votre description suggère le premier comme vous ne mentionnez rien sur les écrivains dans la structure de la base de données, mais je soupçonne que vous voulez dire le dernier.

Une valeur d'un tableau peut être insérer dans une chaîne de PHP tout simplement:

$arr = array("String"); 
echo "{$arr[0]}"; 

Comme je l'ai mentionné précédemment, je pense que cela ne résoudra pas votre problème. Pourriez-vous s'il vous plaît clarifier la relation entre les offres et les écrivains? Si vous essayez d'obtenir les commentaires sur chaque enchérisseur alors vous voulez quelque chose comme:

SELECT 
    tblbid.bidderid, 
    tblbid.amount, 
    (SELECT COUNT(tblfeedback.feedbackid) from tblfeedback WHERE tblfeedback.writerid = tblbid.bidderid) AS total_positivity_feedback 
FROM tblbid WHERE tblbid.essayid = $essayid_bids; 

Sinon, veuillez expliquer davantage.

1

Je ne pense pas que vous serez en mesure d'utiliser un tableau comme ça. Vous devrez utiliser un IN Clause.

Jetez un oeil à SQL IN Operator

Vous devrez construire une liste de vos valeurs, permet de dire quelque chose comme

SELECT * 
FROM yourTable 
WHERE yourID IN (1,2,3,4,5,6) 
1

Comme suggéré par astander, il semble que vous puissiez bénéficier de la clause IN de MySQL. Un moyen rapide de générer la chaîne (1,2,3,4,5,6) serait d'utiliser la fonction php implode().

par exemple:

$array = array(1,2,3,4,5); 
$in = '(' . implode(',', $array) . ')'; 
echo $in; 

rendements:

(1,2,3,4,5) 

so ..

$array = array(1,2,3,4,5); 
$in = '(' . implode(',', $array) . ')'; 
$query = sprintf('select tblbid.bidderid, tblbid.amount, (select count(tblfeedback.feedbackid) from tblfeedback WHERE tblfeedback.writerid IN %s AS total_positivity_feedback FROM tblbid WHERE tblbid.essayid = %s', $in, $essayid_bids); 
Questions connexes