我想弄清楚如何在我的第一個CI應用程序(並且只有第二個PHP應用程序)中編寫語句,並且我卡住了。如何使用PHP&CodeIgniter編寫此語句
我有一個從各自的表中保存book_id和user_id的聯結表。我想找出誰讀了一本書並回應,但我需要的格式是有道理的。下面是該查詢:
$readQuery = $this->db->get_where('books_users', array('book_id' => $isbn));
這是我的邏輯,一個人
// Get my user info
$user = $this->ion_auth->get_user();
// Tell me who has read it.
$this->db->select('user_id');
$readQuery = $this->db->get_where('books_users', array('book_id' => $isbn));
// If only one person has read it
if ($readQuery->num_rows() == 1) {
$readResult = $readQuery->row();
// And if that person was me...
if ($readResult->user_id == $user->id) {
$message = 'You have read this.';
// If it was someone else...
} else {
$reader = $this->ion_auth->get_user($readResult->user_id);
$message = "$reader->first_name $reader->last_name has read this";
}
// If two people have read it
}
所以我好,如果只有一個人讀過它。但是,當兩個人都讀過它時,我想讓它說「名字一和名字二已經讀過這個。」如果登錄的人沒有閱讀它。如果他們是兩個人中的一個,那麼應該說「你和名字二已經讀過這個」。
等等爲3-5。如果有3-5個人閱讀過,則選項爲「姓名一,姓名二,姓名三已閱讀此項」或「你,姓名二,姓名三已閱讀此項。」多達五人
如果它是6或更多,它應該只是說他們兩個的名字,IE「你,名字2和其他5人都讀過這個。」
我認爲爲每個實例做一個條件,然後將所有用戶推送到一個數組。然後,我可以使用in_array()來查看登錄用戶是否已經閱讀並嘗試回報,但我在處理邏輯時遇到了一些麻煩。
有沒有更簡單的方法?
感謝很多提前, 馬庫斯
我更喜歡這種設置更多 - 它看起來更乾淨 - 但我無法爲我的場景實現它。我的大部分困惑來自這一行:$ str。=($ str ==''?'':($ i == $ count-1 && $ count <6?'And':','))。 $用戶[$ i]於;有什麼建議麼?我對三元論的看法不是很好,也不明白我在第一個陳述中的引號。 – Marcus 2010-09-27 21:45:52
三元語句僅用於連接 - 所以如果str是空白的,不要追加任何內容,否則追加結果(如果我們是str的結尾,並且少於6,則追加並附加逗號)。我用逗號分隔事物時總是用這個,所以你在開頭或結尾處沒有額外的逗號 – methodin 2010-09-28 02:12:48
不錯。在你解釋之後,我能夠實現這一點,它縮短了40行(30行vs 70行),並且更容易維護。再次感謝。 – Marcus 2010-09-29 19:20:08