我终于想出了如何实现pg_search的multiisearch功能.但是我在制作一个可用的搜索结果页面时遇到了麻烦,该页面显示了包含搜索词的各种文章和常见问题解答的链接.这是使用Rails 3.2.3的一个非常基本的设置:
楷模:
我有一个文章和一个常见问题解答模型,都有"标题"和"内容"属性,以及这两个模型中的代码:
include PgSearch
multisearchable :against => [:title, :content]
Run Code Online (Sandbox Code Playgroud)
搜索表单查看代码:
搜索表单将所有内容传递给名为"results"的控制器.
<%= form_tag result_index_path, method: :get do %>
<%= text_field_tag :query, params[:query] %>
<%= submit_tag "GO", name: nil %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
结果控制器:
class ResultController < ApplicationController
def index
@pg_search_documents = PgSearch.multisearch(params[:query])
end
end
Run Code Online (Sandbox Code Playgroud)
我想创建一个搜索结果页面,显示找到的每个结果的标题,并返回该项目的链接.我想出了如何将'class'属性拉出@pg_search_documents.我的想法是在结果页面上做这样的事情:
<ul>
<% @pg_search_documents.each do |pg_search_document| %>
<li><%= link_to pg_search_document.searchable.title, "../#{pg_search_document.searchable.class}/#{pg_search_document.searchable.id}" %></li>
<% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)
此代码产生的示例链接是:http://localhost/Article/3.如果我能弄清楚如何对"pg_search_document.searchable.class"进行整理和复数化,那么我将无家可归.我试过在模型和控制器中编写各种方法,并尝试编写一个帮助器.但这是我的Rails技能让我失望的地方.
有什么建议?有谁知道更优雅的方式来完成这个?任何想法/建议都非常感谢.
我觉得这个问题可能已经被问过了一千次,所以如果有人回答,我会道歉.如果是这样,有人能指出我正确的帖子/链接?
我要做的是为我的网站构建一个分面导航.它使用MySQL,这里是我正在使用的表的草图:
products: - id - title - description
attributes: - product_id - name - value
categories: - id - name
products_to_categories: - product_id - category_id
我想要做的是当你在一个类别时显示可用属性列表,允许你为每个属性选择一个或多个值.举个例子,请查看Office Depot的这个页面:http://www.officedepot.com/a/browse/binders/N=5+2177/
到目前为止,我已经使用了很多连接来过滤多个属性:
SELECT products.*, a_options.* FROM products_to_categories AS pc, products, attributes AS a_options, /* list of attribute/value pairs I can continue to refine on */ attributes AS a_select1 /* first selected attribute */ attributes AS a_select2 /* second selected attribute */ ... WHERE pc.category_id = 1 AND products.id = pc.product_id …
使用rails 3.2.3.
这真让我抓狂.我知道活动记录应该简化这些类型的操作,但我无法理解它.
我有一个酒店和设施模型.两者都有has_and_belongs_to_many关系.酒店可以有许多设施,我的目标是搜索酒店的名称/位置,评级和设施.
我可以通过前两个搜索但不能按设施搜索(它们是搜索表单上的复选框).
查看代码:
<%= form_tag hotels_path, :method =>'get' do%>
<p>
<b>Location:</b>
<%= text_field_tag :search, params[:search]%><br /><br />
<b>Rating:</b><br />
<%= radio_button_tag :ranking, '5'%>5 Stars<br />
<%= radio_button_tag :ranking, '4'%>4 Stars<br />
<%= radio_button_tag :ranking, '3'%>3 Stars<br />
<%= radio_button_tag :ranking, '10'%>Hostels<br /><br />
<b>Facilities:</b><br />
<% for facility in Facility.find(:all) %>
<div class="field">
<%= check_box_tag "fc[]", facility.id%>
<%= facility.description %>
</div>
<% end %>
<%= submit_tag "Search", :name => nil%>
</p>
<%end%>
Run Code Online (Sandbox Code Playgroud)
酒店控制器:
def index
@hotels= Hotel.search(params) …Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个跟踪每日库存数据的应用程序.(每天为每个股票创建一条新记录).跟踪将有大约5000-10000股票.然后我需要分析每天,每月或其他时期的一些股票数据,并保留它.
我的问题是:为每个股票设置一个活动表,以保持日常活动(每天都是新行)或者更聪明的是,每天为所有股票插入一个包含10,000条记录的巨大表格会更好吗?请记住,我需要每天为每个库存进行批量计算(计算移动平均值和东西).
这是我第一次使用mysql,我需要一些帮助.我找不到任何解决办法,因为它太容易了,或者我太正常了,无法正常查找.
我想从我的测试数据库中的多个表中进行查询.我们说表是:
类别(*id_category,*id_product)
产品(*id_product,id_category,id_supplier,id_manufacturer)
制造商(*id_manufacturer,名称)
供应商(*id_supplier,名称)
带*的列是整数主键,而不是null,带有auto_increment(从1开始).其他id列只是整数外键(默认为null).
我还需要一个查询,也包括产品表上带有null id_manufacturer和/或id_supplier的行.product表中的那些空字段返回值'0',所以当我进行查询时
SELECT category.id_product, manufacturer.name, supplier.name
FROM category, product, manufacturer, supplier
WHERE category.id_category = product.id_category AND manufacturer.id_manufacturer = product.id_manufacturer AND supplier.id_supplier = product.id_supplier;
Run Code Online (Sandbox Code Playgroud)
没有显示具有空值(0)的行.我希望您能够以最干净,最有效的方式指出我,而不必更改表格属性.任何帮助将非常感谢.
我有以下结构的两个表
表格1
uid | name | age
1 | John | 24
2 | Adam | 35
3 | Sara | 26
Run Code Online (Sandbox Code Playgroud)
表_2
id | uid | meta_key | meta_value
1 | 2 | location | NY
2 | 2 | school | NYU
3 | 3 | Location | NY
4 | 3 | school | XYZ
6 | 1 | location | NY
6 | 1 | school | NYU
Run Code Online (Sandbox Code Playgroud)
我想做的是从 table_1 中选择用户,其位置是 NY,学校是 NYU
这是我尝试使用的查询,但没有成功
SELECT
tabl_1.uid …Run Code Online (Sandbox Code Playgroud) 我有个问题。我有4张桌子:
Invoice_Payment、发票、客户和日历
基本上,我有以下查询,效果很好,除了没有 date_due 的月份不会返回。IE 只会返回带有 date_due 的月份。
注意:日历表只列出一年中的每一天。它包含一个 col 调用 date_field
数据库:http : //oberto.co.nz/jInvoice.txt
预期输出:下面我当前的查询将返回如下内容:
month total
August 5
September 0
October 196
November 205
December 214
January 229
Run Code Online (Sandbox Code Playgroud)
请注意九月没有返回?这是因为表 Invoice_Payment 没有 date_due 记录
我想我必须使用左联接并加入日历表,例如:LEFT JOIN Calendar ON Invoice_Payments.date_paid = Calendar.date_field。但我没有运气
SELECT MONTHNAME(Invoice_Payments.date_paid) as month, SUM(Invoice_Payments.paid_amount) AS total
FROM Invoice, Client, Invoice_Payments
WHERE Client.registered_id = 1
AND Client.id = Invoice.client_id
And Invoice.id = Invoice_Payments.invoice_id
AND date_paid IS NOT NULL
GROUP BY YEAR(Invoice_Payments.date_paid), MONTH(Invoice_Payments.date_paid)
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
我有两个相当大的数据库(每个+1百万行).两个表都具有相同的结构.
如何检查列中的每个值在两个表中是否唯一?
是否有一种
SELECT COUNT(DISTINCTcol ) FROM tbl
类型的查询会考虑BOTH表?
谢谢!
mySQL 完全新手。因此,任何帮助将不胜感激。
我有3 张桌子- carts, users, actions。
carts:
+------------+-------------+-------+
| cartId | session_id | userId|
+------------+-------------+-------+
users:
+----------+-------------+
| usedId | email |
+----------+-------------+
actions:
+-------------+------------------+---- ---------+
| session_id | impressionAction | impressionId |
+-------------+------------------+-----+--------+
Run Code Online (Sandbox Code Playgroud)
在 中carts,每行有一个session_id。
在 中users,每行有一个userId。
在 中,每个会话的所有操作actions都有多个行。session_id
我希望JOIN这三个表的输出类似于
+------+-------------+--------+------------------+--------------+-------+
userId | session_id | cartId | impressionAction | impressionId | email |
+------+-------------+--------+------------------+--------------+-------+
Run Code Online (Sandbox Code Playgroud)
每个userId和有多行session_id;本质上是一个扁平化的文件。我想如果我们JOIN …
使用 djt2 v0.15/dj1.6/pyth2.6.6
多个表的 djt2 doc 视图文件示例:
def people_listing(request) :
config = RequestConfig(request)
table1 = PeopleTable(Person.objects.all(), prefix="1-")
table2 = PeopleTable(Person.objects.all(), prefix="2-")
config.configure(table1)
config.configure(table2)
return render(request, "people_listing.html",
{"table1": table1, "table2": table2})
Run Code Online (Sandbox Code Playgroud)
首先,该示例对于引用的“table1”、“table2”参数似乎不正确。我的测试显示定义名称“people_list”需要在引号中使用,至少在单个表上。此外,为什么有人想将同一张表显示两次?这是一个坏例子吗?这是我的应用程序尝试使用这种结构:
def AvLabVw(request):
config = RequestConfig(request)
cmutbl = CmuTable(CmuVersion.objects.all(), prefix="1-")
simtbl = SimTable(Simulator.objects.all(), prefix="2-")
config.configure(cmutbl)
config.configure(simtbl)
return render(request, "AvRelInfo.html", {"AvLabVw":cmutbl, "AvLabVw":simtbl})
Run Code Online (Sandbox Code Playgroud)
url 文件在 AvLabVw 上选取,html 模板使用 render_table。
{% render_table AvLabVw %}
Run Code Online (Sandbox Code Playgroud)
此代码所发生的情况是仅仍然显示一个表,以返回渲染行上的最后一个表为准。
在文档的其他地方,它说需要使用具有 get_context_data 的 SingleTableView ,我还没有弄清楚......
我尝试过这种风格的实现,我认为它需要一个表对象和一个列表对象?
从 django_tables2 导入视图 从 django_tables2 导入 SingleTableView 从 django_tables2 导入 SingleTableMixin …
multiple-tables ×10
mysql ×6
sql ×2
count ×1
distinct ×1
foreign-keys ×1
join ×1
key ×1
left-join ×1
null ×1
pg-search ×1
python ×1
view ×1
where ×1
where-clause ×1