Как я могу соединить эти две таблицы в SQL? - PullRequest
0 голосов
/ 30 июня 2011

Мне нужно взять только элементы из таблицы "__sobi2_item", которые находятся в той же стране пользователя. И использовать эти результаты для остальной части функции Showupdatelisting. Это мой php скрипт:

<?php
function showUpdatedListing()
    {

//i found the user country field value...
    global $database;
    $user =& JFactory::getUser();
    $userId = $user->get( 'id' );
    $sql = "SELECT (id) FROM #__community_fields WHERE fieldcode= 'FIELD_COUNTRY'";
    $database->setQuery( $sql );
    $fieldID = $database->loadResult();
    $sql = "SELECT (value) FROM #__community_fields_values WHERE field_id= {$fieldID} && user_id= {$userId}";
    $database->setQuery( $sql );
    $usercountry = $database->loadResult();
// From all the entries i take only ones that have country field like the user has...
    $query = "SELECT `data_txt`, `itemid`, `fieldid` FROM `#__sobi2_fields_data` WHERE (`fieldid` = 6) AND ('data_txt' = {$usercountry})";
    $database->setQuery($query);
    $ResultsArray = $database->loadObjectList();

// We need something here like a Query to load only the entries from $ResultsArray... ??
//....instead of this...
    $config =& sobi2Config::getInstance();
        $database = $config->getDb();
        $now = $config->getTimeAndDate();

        $query = "SELECT itemid FROM #__sobi2_item WHERE (published = 1 AND publish_down > '{$now}' OR publish_down = '{$config->nullDate}') ORDER BY last_update DESC LIMIT 0, 30";
        $database->setQuery($query);
        $sids = $database->loadResultArray();
// ......... show update function goes on...

?>

Может кто-нибудь помочь мне подключить и настроить этот запрос? спасибо.

Примечание: в последнем запросе (4) мне нужно отфильтровать элементы массива $ ResultsArray, взяв только те, которые опубликованы, и упорядочив их по last_update. я знаю, что это неправильно, и теперь нет никакой связи с запросом раньше. Вот как у меня есть таблицы в MySQL:

_sobi2_fields_data:

Itemid fieldid data_txt ---> (столбец описания для каждого поля)

_sobi2_item:

Itemid опубликовано ---> (1, если true, 0, если false) last_update ---> (дата последнего обновления для элемента, также равна дате публикации, если нет изменений)

спасибо.

1 Ответ

1 голос
/ 30 июня 2011

Я тоже не знаю, что вы пытаетесь спросить. Ваш последний запрос (номер 4) не имеет смысла для меня, как он связан с вышеуказанными запросами?

[EDIT] Я связал вашу четвертую таблицу выше, предполагая, что itemid является первичным ключом для элементов в таблице sobi2_item и что значение связано с таблицей sobi_fields_data через itemid.

SELECT 
  cf.id,
  sfd.data_txt,
  sfd.itemid,
  sfd.fieldid
FROM #__community_fields cf
INNER JOIN #__community_fields_values cfv ON cf.id=cfv.field_id
INNER JOIN #__sobi2_fields_data sfd ON cfv.value=sfd.data_txt
INNER JOIN #__sobi2_item si ON sfd.itemid=si.itemid
WHERE cf.fieldcode='FIELD_COUNTRY'
AND cfv.user_id=$userId
AND sfd.fieldid=6
AND si.published=1
AND (si.publish_down > '{$now}' OR si.publish_down = '{$config->nullDate}')
ORDER BY si.last_update DESC LIMIT 0, 30

Удачи!

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