Сложный SQL-запрос, включающий три таблицы и имена переменных таблиц - PullRequest
0 голосов
/ 27 августа 2009

У меня есть две разные таблицы, из которых мне нужно извлечь данные

blogs

, который имеет следующий столбец

blog_id

и другая таблица с именем переменной, например

$blog_id . "_options

Имеет следующие столбцы:

option_id, option_name, option_value

Например:

option_id = 1, option_name='state', option_value='Texas'
option_id = 2, option_name='blog_name', option_value='My Blog'

И, наконец, мне предоставляются следующие данные POST

state

Вот что мне нужно сделать: получить название любого блога в области данных POST. Проще говоря, мне нужно выбрать option_value из option_name 'blog_name' в той же таблице, что option_name='state' и option_value="$_POST['state']', а имена таблиц создаются из списка blog_id (из таблицы blogs) с добавлением «_options» в конце.

Боже, я даже не знаю, можно ли сказать то, что я пытаюсь сделать, человеческим ртом.

В любом случае, я считаю, что stackoverflow - это место, где можно спросить, если угодно.

Дайте мне знать, если я смогу кое-что прояснить для вас, я постараюсь.

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

Ответы [ 3 ]

1 голос
/ 27 августа 2009

Вы можете сделать это в прямом SQL, но я думаю, что вам будет лучше использовать встроенные функции WordPress, чтобы, если структура БД изменилась вообще (что может произойти, поскольку MU и обычные ядра WP скоро будут объединены).) вы все еще в порядке.

Похоже, вы хотите получить информацию о других блогах из активного блога.Я бы сделал это в два этапа:

$blogs = get_blog_list(0,'all');
foreach($blogs as &$blog) {
    switch_to_blog($blog['id']);
    $blog['state'] = get_option('state');
    restore_current_blog();
}
restore_current_blog();

Это даст вам список деталей для всех активных блогов по установке MU + поле состояния из таблицы параметров.

Да, он менее элегантен, но функционален с небольшим беспорядком.Если вам нужно использовать эту информацию несколько раз при загрузке страницы, используйте кеш объектов WP, чтобы сохранить переменную для последующего использования.Есть также множество способов, которыми вы могли бы либо вызвать это через ajax или веб-сервис из родительского блога, либо внедрить решение memcache, чтобы эти данные могли централизованно храниться и управляться, если это становится проблемой, но я думаю, что если вы используете объекткеш здесь с чем-то вроде WP Super Cache на внешнем интерфейсе у вас все будет хорошо.

0 голосов
/ 27 августа 2009

Если я правильно понял, вы создаете таблицы с именами переменных.

Я не думаю, что это хорошая идея.

Почему бы вам не создать только одну таблицу с переменным полем в ней, содержащую имя переменной типа varchar? Это поле может содержать $ blog_id.

Так же, как и другой ответ на ваш вопрос.

0 голосов
/ 27 августа 2009

Я не думаю, что вы делаете это правильно.

Вместо использования имени таблицы _options, почему бы не иметь что-то вроде

blog_options

, которое содержит поля

  • blog_id
  • option_id
  • option_name
  • option_value

Тогда вы можете счастливо JOIN на основе blog_id

...