Как использовать переменные (массивы) php в операторах выбора mysql? - PullRequest
0 голосов
/ 25 апреля 2010

Как вы используете переменную (массив) php внутри оператора выбора mysql?

Я разрабатываю сайт аукциона и в настоящее время работаю над страницей, которая позволяет людям просматривать список всех текущих ставок для элемента. Я хочу отобразить 3 столбца:

  1. amountbid - сумма, которую каждый участник торгов предлагает для позиции (удерживается в tblbid)

  2. bidderid - идентификатор каждого участника, который сделал ставку (находится в tbluser)

  3. total_posittivation_feedback - сколько пользователей оставили положительный отзыв для участника торгов (рассчитывается по tblfeedback)

Чтобы найти столбцы «сумма» и «ставка», я передаю параметр URL-адреса essayid с предыдущей страницы. Это отлично работает.

Несмотря на это, я не могу отобразить столбец total_posittivation_feedback для различных пользователей, которые сделали каждую ставку.

Мой запрос MySQL выглядит так:

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

Я полагаю, что единственный способ сделать это состоит в том, чтобы переменная содержала бидериды тех людей, которые претендуют на это конкретное эссе? Я не могу понять, как это сделать?!?

Большое спасибо за вашу помощь

Ответы [ 3 ]

2 голосов
/ 25 апреля 2010

Как подсказывает astander, похоже, вы можете воспользоваться предложением IN MySQL. Быстрый способ создать строку (1,2,3,4,5,6) - использовать функцию php implode () .

например:

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

выходы:

(1,2,3,4,5)

так ..

$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);
2 голосов
/ 25 апреля 2010

Не думаю, что вы сможете использовать такой массив. Вы должны будете использовать IN пункт .

Посмотрите на Оператор SQL IN

Так что вам нужно будет составить список ваших значений, скажем что-то вроде

SELECT *
FROM yourTable
WHERE yourID IN (1,2,3,4,5,6)
0 голосов
/ 25 апреля 2010

Из вашей проблемы неясно, откуда взялся идентификатор Writer. Когда вы говорите «массив», вы имеете в виду массив PHP или вы ссылаетесь на несколько значений, хранящихся в строках базы данных? Ваше описание предлагает первое, поскольку вы ничего не упоминаете о Writers в структуре базы данных, но я подозреваю, что вы имеете в виду второе.

Значение из массива можно вставить в строку PHP довольно просто:

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

Как я упоминал ранее, я подозреваю, что это не решит вашу проблему. Не могли бы вы уточнить связь между заявками и авторами? Если вы пытаетесь получить отзыв о каждом участнике, то вам понадобится что-то вроде:

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;

В противном случае, пожалуйста, объясните дальше.

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