Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


7 questions online user: 39

0
votes
answers
27 views
+10

How to organise a many to many relationship in MongoDB

I have two tables/collections; Users and Groups. A user can be a member of any number of groups and a user can also be an owner of any number of groups. In a relational database I'd probably have a third table called UserGroups with a UserID column, a GroupID column and an IsOwner column.

I'm using MongoDB and I'm sure there is a different approach for this kind of relationship in a document database. Should I embed the list of groups and groups-as-owner inside the Users table as two arrays of ObjectIDs? Should I also store the list of members and owners in the Groups table as two arrays, effectively mirroring the relationship causing a duplication of relationship information?

Or is a bridging UserGroups table a legitimate concept in document databases for many to many relationships?

Thanks

0
votes
answers
30 views
+10

未能就Laravel

0

插入多個標籤,我想插入多個標籤一個帖子記錄,因此,這裏是我的郵編@店:未能就Laravel

$post = Post::create(array(
      'title' => $request->title, 
      'body' => $request->body, 
      'user_id' => Auth::id(), 
     )); 

     if($post && $request->tags) 
     { 
      $tagNames = explode(',', $request->tags); 
      $tagIds = []; 
      foreach($tagNames as $tagName) 
      { 
       $tag = Tag::firstOrCreate(['name'=>$tagName]); 
       if($tag) 
       { 
        $tagIds[] = $tag->id; 
       } 
      } 

      $post->tags()->attach($tagIds); 
     } 

,但它給我一個錯誤"Call to a member function attach() on null"。當我在MySQL中檢查標記已經在那裏,但我無法找到我的post_tag表上的任何條目。這裏是我的崗位模型:

class Post extends Model 
{ 
    protected $fillable = ['user_id','title','slug','body','tags','category_id','featured']; 

    public function category() 
    { 
     return $this->belongsTo('AppCategory'); 
    } 

    public function tags() 
    { 
     $this->hasMany('AppTag'); 
    } 
} 
沙发
0
1

您需要在您的Post模型回電話的hasMany

public function tags() 
{ 
    return $this->hasMany('AppTag'); 
} 

更新

您應該使用belongsToManyhasMany

+0

現在我得到了這個錯誤「調用未定義的方法照亮數據庫查詢 Builder :: attach()」 – Ying

+0

它應該是'belongsToMany'不'hasMany' – Hamoud

+0

偉大,謝謝。你能用belongsToMany更新你的答案嗎?我會選擇它。 – Ying

0
votes
answers
39 views
+10

刪除連接表的行級聯休眠

0

我想從中間連接表中刪除數據。我越來越刪除連接表的行級聯休眠

更新或刪除表「eoclass」違反了表「eostaff_user_eoclass」 細節外鍵約束「fk_o5mbi65xmqv60x0m5v0l1raf8」:密鑰(primary_key)=(51)仍然從表「eostaff_user_eoclass」引用。

這裏是我的實體

@Entity 
@Table(name = "EOSTAFF_USER") 
@SequenceGenerator(name = "EOSTAFF_USER_SEQ", initialValue = 1, allocationSize = 1, sequenceName = "EOSTAFF_USER_SEQ") 
public class EOStaffUser extends EOObject { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EOSTAFF_USER_SEQ") 
    @Column(name = "PRIMARY_KEY") 
    public long primaryKey; 

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    public List<EOClass> eoClassArray = new LinkedList<>(); 
} 

@Entity 
@Table(name = "EOCLASS", uniqueConstraints = @UniqueConstraint(columnNames = { "eoinstitute_primary_key", 
    "lkclass_primary_key", "lksection_primary_key", "lksubject_primary_key" })) 

@SequenceGenerator(name = "EOCLASS_SEQ", initialValue = 1, allocationSize = 1, sequenceName = "EOCLASS_SEQ") 

public class EOClass extends EOObject { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EOCLASS_SEQ") 
    @Column(name = "PRIMARY_KEY") 
    public long primaryKey; 
} 
+1

請首先在數據庫級別檢查通常的嫌疑人。刪除有關記錄/實體是否可以留下任何兒童記錄?將這些東西從清單中刪除,然後再擔心Hibernate。 –

沙发
0
0

你不能簡單地刪除EOClass因爲Hibernate不會刪除連接表的記錄。

對於您的映射,您需要加載EOStaffUser,從eoClassArray刪除EOclass併合並整個EOStaffUser實體。

0
votes
answers
25 views
+10

MySQL創建多個外鍵的表

0

我想創建一個表有多個外鍵到多個不同的表(因爲關係是多對多的)。MySQL創建多個外鍵的表

#creating t1 
CREATE TABLE t1 
(ID   INT    AUTO_INCREMENT   primary key, 
x1   VARCHAR(50) 
); 

#Creating t2 
CREATE TABLE t2 
(v1  VARCHAR(50), 
v2  VARCHAR(50), 
primary key (v1, v2) 
); 

#creating attended table 
CREATE TABLE t3 
(ID  INT, 
v1   VARCHAR(50), 
v2   VARCHAR(50), 
primary key (ID, v1, v2), 
foreign key(v1)     references t2(v1), 
foreign key(v2)     references t2(v2), 
foreign key(ID)     references t1(ID) 
); 

以上是我的代碼。我沒有創建t1和t2的錯誤。不過,我得到了下面的代碼,當我嘗試創建T3:

ERROR 1215(HY000):無法添加外鍵約束

沙发
0
0

外鍵是其他表的完整的關鍵 - 你不能只用它的一半作爲FK。

t2有一個組合主鍵。當在t3中引用fk時,你需要兩個。

Why use multiple columns as primary keys (composite primary key)

要創建一個複雜的FK看到SQL Server: adding foreign key on multiple columns 或MySQL的看到Multiple-column foreign key in MySQL?

+0

好。所以我必須編碼這個呢? 外鍵(v1,v2)引用t2(v1,v2) – billyl320

+0

已編輯:添加了2個相關的SO答案。 –

+0

gotcha - 謝謝!代碼現在正在運行。 – billyl320

0
votes
answers
36 views
+10

如何獲取登錄用戶不是MySQL中的所有用戶?

3

我完全能夠得到所有的登錄用戶當前的朋友,這是我此查詢這裏做 -如何獲取登錄用戶不是MySQL中的所有用戶?

SELECT users.* 
FROM users 
LEFT JOIN friends 
ON users.id = friends.friend_id 
WHERE friends.user_id = $user_logged_in_id 

但我想要做的相反,我也搞不清楚。

我想要做朋友的邏輯。

我需要得到所有誰是當前登錄用戶的用戶尚未朋友

我有一個用戶表和朋友表作爲一個多用戶和他們的朋友之間一對多的關係。 friends表中的鍵是user_id friend_id。

爲了說明某人是我與其他用戶的朋友(說登錄的用戶ID是3,朋友的用戶ID是6)user_id = 3friend_id = 6作爲一行,然後把另一行與ID的翻轉來說明友誼的另一種方式,user_id = 6friend_id = 3

用戶表

|---------------------|------------------| 
|   id   |  username  | 
|---------------------|------------------| 
|   1   |  sonja12  | 
|---------------------|------------------| 
|   2   |  dorris32  | 
|---------------------|------------------| 
|   3   |  billy32  | 
|---------------------|------------------| 
|   4   |  micha97  | 
|---------------------|------------------| 
|   5   |  travis841 | 
|---------------------|------------------| 
|   6   |  johnny28  | 
|---------------------|------------------| 

朋友表

|---------------------|------------------|------------------| 
|   id   |  user_id  |  friend_id | 
|---------------------|------------------|------------------| 
|   1   |  3   |   6  | 
|---------------------|------------------|------------------| 
|   2   |  6   |   3  | 
|---------------------|------------------|------------------| 

編輯:

我想我已經縮小我的問題有點更簡潔。

我想從用戶表中獲取所有用戶,其中他們的ID不會顯示爲朋友表中當前登錄用戶的user_id旁邊的朋友ID。

+1

更具體。現在看起來像'... WHERE friends.user_id!= $ user_logged_in_id「'會修復它,但我假設,這沒有奏效? – SourceOverflow

+0

不,返回除登錄用戶以外的所有人,並且它返回用戶登錄的用戶已經是朋友的兩倍 我希望能夠看到登錄用戶不是朋友的列表,以便他們可以輕鬆點擊「添加朋友按鈕」並添加新朋友。返回所有用戶並排除那些已經登錄的用戶已經是朋友,但我覺得像普通的sql會是一個更好的方式去這樣的事情。 –

沙发
0
2

您以奇怪的方式思考問題。這可能有助於將其視爲需要創建的集合的交集,而不是缺少id的集合。

SELECT id from users WHERE id != $logged_in_user AND id NOT IN (SELECT friend_id from friends where user_id=$logged_in_user)

+1

小心:'NOT IN(SELECT ...)'是非常可怕的在MySQL中緩慢 –

+0

@RickJames你知道比'NOT IN'更好的方式來完成任務嗎?我肯定對它開放。我現在看到其他答案,但不確定它們中的任何一個是否會我想我可以測試他們所有的並記錄執行時間。我的替代方案更慢,因爲我之前返回了整個列表,然後在每個用戶的循環中運行另一個單獨的查詢,以將它們從php中的數組中刪除,如果它們已經是朋友8 –

+1

'NOT EXISTS(SELECT 1 ... )' - 只評估直到它得到答案,而不是建立整個列表。或者'LEFT JOIN ... ON ... WHERE .. IS NULL' - 有時候類似的代碼。複合INDEX(user_id,friend_id)'會有很大的幫助。 –

板凳
0
0

SQL

SELECT u.* 
FROM usrs u 
LEFT JOIN friends f 
ON u.id = f.friend_id 
GROUP BY u.id, u.username, IF(f.user_id = $user_logged_in_id, 1, 0) 
HAVING MAX(IF(f.user_id = $user_logged_in_id, 1, 0)) = 0; 

演示

http://rextester.com/ELXFZ39682

說明

該查詢是基於您的原始數據,但是按每個用戶ID進行分組,因此不會返回重複項。爲了返回那些不是登錄用戶的好友,IF(f.user_id = $user_logged_in_id, 1, 0)將生成的列添加到設置爲1的組,如果該行是登錄用戶的好友,否則爲0.然後,我們可以使用HAVING MAX(...) = 0限制爲沒有行是朋友的組。

地板
0
1

對於更大的數據集,我會用一個NOT EXISTS子查詢的查詢:

select u.* 
from users u 
where u.id <> $user_logged_in_id 
    and not exists (
    select * 
    from friends f 
    where f.user_id = $user_logged_in_id 
     and f.friend_id = u.id 
) 

或LEFT(反)JOIN:

select u.* 
from users u 
left join friends f 
    on f.user_id = $user_logged_in_id 
    and f.friend_id = u.id 
where u.id <> $user_logged_in_id 
    and f.friend_id is null 

我認爲這兩個查詢執行計劃應該是差不多的相同。

演示:http://rextester.com/KUOZ9198

4楼
0
0
SELECT DISTINCT users.id, users.username 
    FROM users 
     LEFT OUTER JOIN friends 
    ON (friends.user_id = $user_logged_in_id and friends.friend_id = users.id) 
WHERE users.id <> $user_logged_in_id 
    AND friends.friend_id is null; 

該查詢可能會比NOT IN子查詢,如果用戶預計將有很多的朋友更好的性能。如果不是在子查詢執行相同,如果不是更好。

請注意DISTINCT。你需要這個,因爲這種關係是多對多的。

0
votes
answers
32 views
+10

我應該選擇具有索引主鍵和鍵的唯一列具有多個值?

1

我有2表與許多 - 許多關係。所以我使用第三個表格將2個表格映射在一起。我不知道應該在自動遞增的整數主鍵之間進行選擇,然後在其他鍵上使用唯一索引或使用主鍵有很多值。每種方式有哪些好處?我應該選擇具有索引主鍵和鍵的唯一列具有多個值?

感謝很多

沙发
0
0

在Microsoft SQL Server數據庫有一個PRIMARY KEY約束和非空列UNIQUE約束之間沒有顯著差異。主鍵基本上只是語法糖。公約和個人偏好是使用PRIMARY KEY約束的最常見原因。

在任何DBMS中,真正重要的是您擁有哪些密鑰以及如何使用它們,而不是您指定爲「主」的那些密鑰。

板凳
0
0

理論上數據建模的,兩種解決方案都是正確的。

但在實踐中:最好使用第二種解決方案。
採用新的自動遞增ID並將其設置爲主鍵並將兩個傳輸的外鍵設置爲唯一(一起)。

優點:
數據的冗餘: 假設我們有一個名爲兩個表和B型和AB是新創建的中間表(因爲很多一對多的關係)。
現在如果AB與C有一個新的關係(一對多)。我們應該將AB的Primary-Key作爲外鍵傳遞給C.所以最好轉換ID而不是兩個屬性。如果C與D具有新的關係(一對多),那麼也是如此,等等。

缺點:
訪問性能,以標識:雖然在第一個解決方案的冗餘,但有一個性能的訪問標識,而無需使用任何連接。 (假設在表C中,我們想要訪問A和B的ID。)但是,訪問只有到ID沒有太多的用處。

0
votes
answers
26 views
+10

MySQLIntegrityConstraintViolationException:重複錄入例外@JoinTable休眠

0

當我試圖使用Hibernate保存一個實體,它給MySQLIntegrityConstraintViolationException: Duplicate entry '2' for key ...MySQLIntegrityConstraintViolationException:重複錄入例外@JoinTable休眠

這是關聯類首

@ManyToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "selectedLanguages", 
joinColumns = @JoinColumn(name = "preferenceId"), 
inverseJoinColumns = @JoinColumn(name = "languageId")) 
private List<Language> languages; 

聲明,這是在mysql服務器中創建表

CREATE TABLE `languages` (
    `preferenceId` bigint(20) NOT NULL, 
    `languageId` int(11) NOT NULL, 
    UNIQUE KEY `UK_ipl1uqtuxu2oxu5pddfi6sebl` (`languageId`), 
    KEY `FKm18lbdrrxs89ff7pymjalc7ca` (`preferenceId`), 
    CONSTRAINT `FKhmgypuduucfqf98sf2ymorqpr` FOREIGN KEY (`languageId`) REFERENCES `languages` (`languageId`), 
    CONSTRAINT `FKm18lbdrrxs89ff7pymjalc7ca` FOREIGN KEY (`preferenceId`) REFERENCES `preferences` (`preferenceId`) 
); 

它顯示語言ID是唯一的,這不是作爲用戶的預期行爲可以知道一些語言和一種語言可以被許多用戶引用, 我試圖在inverseJoin部分中添加unique=false而沒有成功。 如何刪除languageId的唯一約束。我的代碼有什麼問題?任何幫助將不勝感激。請問你是否需要更多的數據信息

沙发
0
0

它工作時,我改變List<Language>Set<Language>不知道爲什麼。 **如果有人知道原因,請張貼。