Ваш запрос говорит:
WHERE `fromuserid` has any value
OR (touserid = $vbulletin->userinfo['userid']).
Если вы хотите, чтобы строки, в которых либо fromuserid
матчей идентификатор пользователя или touserid
матчей идентификатор пользователя, попробуйте следующее:
$queryrel = $db->query_read("
SELECT * FROM " . TABLE_PREFIX . "anexampletable
WHERE (fromuserid = " . $vbulletin->userinfo['userid'] . ")
OR (touserid = " . $vbulletin->userinfo['userid'] . ")
AND confirmstatus =1
");
Обновление:
Трудно определить проблему, не зная t с данными, с которыми вы работаете. Я создал тест, который выводит данные, с которыми работает ваш код, вы сможете увидеть, как возвращаются отдельные части вашего запроса, а затем определить, в чем проблема.
Временно измените ваш файл, поставив этот код непосредственно перед кодом в вашем примере (вам нужно будет использовать правильное имя таблицы). Затем отредактируйте свой вопрос и вставьте вывод внизу.
echo "vBulletin User ID = " . $vbulletin->userinfo['userid'];
$test_query1 = $db->query_read("
SELECT * FROM " . TABLE_PREFIX . "anexampletable
WHERE (fromuserid = " . $vbulletin->userinfo['userid'] . ")
");
$t1_count = 0;
echo "Test From User ID Results<br />";
while ($test1_output = $db->fetch_array($test_query1)) {
$t1_count++;
echo "Test From User Result " . $t1_count . "<br />";
echo "From User ID = " . $test1_output['fromuserid'] . "<br />";
echo "To User ID = " . $test1_output['touserid'] . "<br />";
echo "Confirm Status = " . $test1_output['confirmstatus'] . "<br />";
echo "Relationship Status = " . $test1_output['reltype'] . "<br />";
}
$test_query2 = $db->query_read("
SELECT * FROM " . TABLE_PREFIX . "anexampletable
WHERE (touserid = " . $vbulletin->userinfo['userid'] . ")
");
$t2_count = 0;
echo "<br /><br />Test To User ID Results<br />";
while ($test2_output = $db->fetch_array($test_query2)) {
$t2_count++;
echo "Test To User Result " . $t2_count . "<br />";
echo "From User ID = " . $test2_output['fromuserid'] . "<br />";
echo "To User ID = " . $test2_output['touserid'] . "<br />";
echo "Confirm Status = " . $test2_output['confirmstatus'] . "<br />";
echo "Relationship Status = " . $test2_output['reltype'] . "<br />";
}
exit();
Окончательный код?
Оказывается, что существуют две проблемы:
1) Запрос необходимо модифицировать:
Оригинал:
fromuserid OR touserid = " . $vbulletin->userinfo['userid'] . "
Обновлено:
(fromuserid = " . $vbulletin->userinfo['userid'] . "
OR
touserid = " . $vbulletin->userinfo['userid'] . ")
Обновлено 07/05/2012
2) Вы не можете перебирать массивы в шаблонах vb3, поэтому мы будем конкатенировать строки.
$ showit переменная, выводимая для использования в шаблоне, представляет собой строку. Он переписывается каждым последовательным прохождением через цикл while, так что только последний результат отправляется в шаблон. Вместо использования $showit = xxx;
используйте $showit .= xxx;
с .=
.
Я обновил последние 15 строк кода ниже.
Вы можете посмотреть на то, как формируется страница форума, чтобы узнать больше.
Открыть файл upload \ forumdisplay.php. Цикл while
, который создает список тем, начинается здесь:
upload \ forumdisplay.PHP (962)
while ($thread = $db->fetch_array($threads))
Выход для каждого потока генерируется с использованием "threadbit" шаблон и добавлен в $threadbit
строку здесь:
загрузки \ forumdisplay.php (1000)
eval('$threadbit .= "' . fetch_template('threadbit') . '";');
"FORUMDISPLAY" шаблон выводится в конце:
загрузки \ forumdisplay.php (1056)
eval('print_output("' . fetch_template('FORUMDISPLAY') . '");');
Если вы посмотрите на шаблон FORUMDISPLAY, вы увидите, что строка $threadbit
используется примерно с 1/5 от начала.
Попробуйте приведенный ниже код и посмотреть, как это работает, я заменил серию else if
заявлений с switch()
заявлением. Это более эффективно.
if ($_REQUEST['do'] == 'showthis') {
// Make standalone query, easy to output query string and run it directly for testing
$rel_sql = "SELECT * FROM " . TABLE_PREFIX . "anexampletable
WHERE (fromuserid = " . $vbulletin->userinfo['userid'] . "
OR touserid = " . $vbulletin->userinfo['userid'] . ")
AND confirmstatus =1";
$queryrel = $db->query_read($rel_sql);
if ($db->num_rows($queryrel))
{
while ($queryre = $db->fetch_array($queryrel))
{
switch ($queryre['reltype'])
{
case 1:
$ty = " do something 1 ";
break;
case 2:
$ty = " do something 2 ";
break;
case 3:
$ty = " do something 3 ";
break;
// Add as many cases as needed
.......
case xxx:
$ty = " do something xxx ";
break;
.......
default:
$ty = " is default ";
}
$sender = $queryre['fromusername'];
$receiver = $queryre['tousername'];
// UPDATED FROM HERE DOWN on 07/05/2012
// Add to $showit with ".=" rather than overwriting it with "=".
// Method One
// If the output is simple, try this.
// I added a line break after each entry.
$showit .= $sender . $ty . $receiver . "<br />";
OR
// Method Two
// If the output is complex.
// Create a separate template and store the output in $showit
// Remember to add the new template to the $actiontemplates array.
eval('$showit .= "' . fetch_template('showit') . '";');
}
eval('print_output("' . fetch_template('relationships') . '");');
}
}
Он не будет показывать все результаты, снова. Он показывает только 1, и я пытаюсь выяснить, почему, я могу сказать, что я играю с этим кодом более 20 дней ежедневно, но ничего не работает. Из того, что вы видите, ребята, это простой скрипт пользовательских отношений, который вытащит данные из базы данных. Любые другие идеи от гуру? Я новичок и стараюсь учиться на своих ошибках. $ ty = номер типа отношения, я имею в виду, что у меня не было более простой идеи о том, как его вытащить, но опять же, он не покажет всех результатов, я понятия не имею. Любая помощь? Большое вам спасибо за подсказку для вашей помощи !!!! –
Пожалуйста, запустите тест, который я добавил в свой ответ, и поставлю результаты в ваш вопрос. – codewaggle
форума ID пользователя = 1Test Из ID пользователя Результаты теста от пользователя Результат 1 От идентификатора пользователя = 1 Для идентификатора пользователя = 2 Подтверждение состояния = 1 Семейное положение = 4 Тест От пользователя Результат 2 От ID пользователя = 1 Для ID пользователя = 2 Подтверждение Статус Статус = 1 Отношения = 6 Тест От пользователя Результат 3 От идентификатора пользователя = 1 Для идентификатора пользователя = 2 Подтверждение состояния = 1 Семейное положение = 3 Test Для пользователя ID Результаты –