我有下表
title year authors
--------------------------------------------------------------------------
title book 1 2015-12-01 White McGregor Waine
title book 2 2016-10-14 McGregor Bush Rossi
title book 3 2017-05-22 Bush McGregor Lopes
...... .... .......
作者字段由用空格分隔的名称组成(如果需要,我也可以使用不同的分隔字符。)
如何推断出版更多图书的作者的desc列表?考虑一下我不知道作者的名字。
在示例中,列表是:
Author Books published
---------------------------------------
McGregor 3
Bush 2
Whaite 1
Whaine 1
Rossi 1
Lopes 1
答案 0 :(得分:3)
这样做的恰当方法是规范化。
这属于多对多关系。
为了存储多对多关系,需要主要存储每个关系的主键(ID)的中间表。在你的情况下,
authors_table(author_id,name,...)
books_table(book_id,name,...)
authors_books_table(id,author_id,book_id)
Here是一个更详细的解释。
然后进行简单的连接,将获得所需的结果。
答案 1 :(得分:2)
首先,你必须学习Normalization。数据库规范化或简单规范化是组织关系数据库的列(属性)和表(关系)以减少数据冗余和提高数据完整性的过程。 ......非正式地,关系数据库关系通常被描述为"标准化"如果它符合第三范式。
你也可以试试这个
"""
Interceptor example using ICMP
ADD this rule:
sudo iptables -I INPUT 1 -p icmp -j NFQUEUE --queue-balance 0:2
"""
import time
from multiprocessing import Process
import os
from pypacker import interceptor
from pypacker.layer3 import ip
class TrafficMonitor(object):
# ICMP Echo request intercepting
def verdict_cb(self, ll_data, ll_proto_id, data, ctx):
# ip1 = ip.IP(data)
ip1 = ip.IP(data)
print('\n---------->Packet recieved:\n\t source ip:%s , the dst ip:%s, \n\npacket_info:%s '
%(ip1.src_s, ip1.dst_s, ip1))
return ip1.bin(), interceptor.NF_ACCEPT
def dpi_start(self, queue_id):
print('queue', queue_id)
ictor = interceptor.Interceptor()
# queue = [0, 1, 2]
ictor.start(self.verdict_cb, queue_ids=queue_id)
def start_int():
monitor = TrafficMonitor()
proc = Process(target=monitor.dpi_start, args=([0, 1, 2],))
proc.start()
if __name__ == '__main__':
while True :
a = input('press y to start: ')
if a == 'y':
start_int()
elif a == 'x':
os._exit(0)
答案 2 :(得分:1)
正如其他人已经指出的那样,您需要规范化您的数据库。规范化的优点包括但不限于以下内容:
因此,您将拥有以下表格:
作者(身份证,姓名)
author_of_book(id,author_id,book_id)
书籍(身份证,头衔,年份)确保id字段是主键,author_id和book_id分别是外键。
使用这种新结构,您可以像这样进行所需的选择:
select authors.name, count(*) as `books published`
from authors
join author_of_books
on authors.id = author_of_books.author_id
join books
on author_of_books.book_id = books.id
group by authors.id, authors.name
order by count(*) desc