請問類似像youtube頁面可以顯示你是否按過like或dislike這種的資料庫欄位是如何設(shè)計的?并在用戶到達該頁面時去資料庫判斷出來?
我想的是否設(shè)計理念是這樣
Post table
id picroute likeusers dislikeusers
1 img/0001.jpeg {1,3,4,6,11,44,233} {2,5,8,15,66,77,88}
在一個 欄位里面 就放進去了 以點選like的userid
請問這樣的填法類似分隔號的用什么語法去一個個填在該欄位尾端嗎?
在讀取實是否可以在資料庫處理語法就去讀去比如說 likeusers是否有 11這個userid 而不用去將整個 likerusers 這個欄位從資料庫取出然后再去用類似篩癬的進行php或javascript處理?
另外可否用sql語法去新增和刪除某個userid不是整個欄位取出后 刪除 在整個欄位用更新放回欄位?
可能有人想說我為何不考慮整個table 但是我覺得一個youtube一個文章有l(wèi)ike dislike的就去制造一個table去容納已經(jīng)點選like的userid 也制造太多table了吧!
所以想要達到的效果是
一個頁面里面有多個圖片比如說九個圖片
每個圖片上面都有一個like和dislike 的鈕和顯示數(shù)字
當用戶進到這個頁面 去資料庫取出 就各圖片的連接src 然后將用戶的userid 去比對每個 post table里面的 單一個id的 userlike陣列里面是否有該userid
若likeusers有該userid的話 顯示已按like不能點選了 但是dislike可以點選的狀態(tài)
反過來亦然
然后如果兩個欄位都沒有userid的話 那就like和dislike都顯示可以選取的狀態(tài)
不知道這樣的設(shè)計理念是可以的嗎?還是有哪種方式可以實現(xiàn)呢?
我想要知道后用laravel寫出來 但是現(xiàn)在還不知道可以用什么sql語法
去將userid寫入同一個欄位或查訓在同一個欄位是否有該userid還有如何去個別刪除 增加某個userid?
就是類似于sf這種投票、反對的功能吧?如果是我來做的話,我會這樣搞:
id article_id user_id is_like
自增ID 文章ID 用戶ID 是否喜歡(1喜歡0不喜歡)
如上是表的數(shù)據(jù)結(jié)構(gòu),應(yīng)該符合你的功能需求;
而且取值、查詢也方便;
laravel中如何操作不清楚,但是如果你的欄位非要存1,2,3,4,5
這種數(shù)據(jù)結(jié)構(gòu)的話,那么原生的mysql
可以采用find_in_set函數(shù)來操作;
建議先熟悉下文檔,在laravel里面要達到類似的需求是非常容易的,使用一下多對多關(guān)聯(lián)就可以了。
先建立相應(yīng)的模型和表:
User模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
//
}
users表
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username')->unique()->nullable();
$table->string('password')->nullable();
$table->rememberToken();
$table->timestamps();
});
Post模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//
}
posts表
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id')->index();
$table->string('path');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
然后在模型中添加相應(yīng)的關(guān)聯(lián),前面也說了點贊這種適合使用多對多關(guān)聯(lián)
User模型
public function likes(){
return $this->belongsToMnay('App\Models\Post');
}
Post模型
public function liked_users(){
return $this->belongsToMany('App\Models\User');
}
這時候在控制器中只要調(diào)用如下方法就可以了:
// 點贊
$user->likes()->attach($post_id);
// 取消點贊
$user->likes()->detach($post_id);
// 獲取用戶點贊的圖片
$user->likes;
// 分頁獲取用戶點贊的圖片
$user->likes()->paginate(10);
// 判斷用戶是否喜歡某圖片
$user->likes()->where('post_id',$post_id)->exists();
// 獲取某圖片的點贊用戶
$post->liked_users;
更多關(guān)于多對多的用法請查看文檔
https://laravel-china.org/doc...
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務(wù)外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。