2012-02-01 93 views
1

第一類是一般的信息存放地表,第二個是等待表,用戶註冊(如等待名單)嘗試查詢兩個表,我無法弄清楚如何

+---------+--------------+------+-----+-------------------+----------------+ 
| Field | Type   | Null | Key | Default   | Extra   | 
+---------+--------------+------+-----+-------------------+----------------+ 
| id  | int(11)  | NO | PRI | NULL    | auto_increment | 
| name | varchar(30) | YES |  | NULL    |    | 
| userid | int(3)  | YES |  | NULL    |    | 
| address | varchar(300) | YES |  | NULL    |    | 
| desc | varchar(550) | YES |  | NULL    |    | 
| phone | int(15)  | YES |  | NULL    |    | 
| image | varchar(50) | YES |  | NULL    |    | 
| website | varchar(100) | YES |  | NULL    |    | 
| cat  | varchar(25) | YES |  | NULL    |    | 
| date | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
+---------+--------------+------+-----+-------------------+----------------+ 


+----------+-----------+------+-----+-------------------+----------------+ 
| Field | Type  | Null | Key | Default   | Extra   | 
+----------+-----------+------+-----+-------------------+----------------+ 
| id  | int(11) | NO | PRI | NULL    | auto_increment | 
| userid | int(11) | YES |  | NULL    |    | 
| place_id | int(11) | YES |  | NULL    |    | 
| date  | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
+----------+-----------+------+-----+-------------------+----------------+ 

現在我正在做一個SELECT * FROM的地方;並在主頁上顯示數據。像tihs:

<? foreach($places as $place): ?> 
<? echo $place->name; ?>; <? echo $place->userid; ?> etc ... 
<a href="#">Click this to insert your userid and $place->id into wait table</a> 
<? endforeach ?> 

這是我迷路了。我想這樣做:

<? if($current_user_id == $userid_from_wait_that_matches_place_id): ?> 
<p>You already registered for this!</p> 
<? else: ?> 
<a href="#">Click this to insert your userid and $place->id into wait table</a> 
<? endif; ?> 

不知道它是更好的,增加了數據的等待表的模型來檢查用戶的ID或在該主頁抓取數據對模型進行檢查。從我讀過的內容來看,第二種選擇會更好。或者我應該使用兩個單獨的查詢?

回答

1

我認爲你的數據庫設計是錯誤的:你應該創建單獨的users表用戶特定的數據(名稱,圖像,...)加user_id。另一張帶有「常規」信息的表格(如您所說):名稱,desc,地圖等。並且在此表中並未僅使用用戶特定信息user_id

如果你的數據庫不是太大,你可以使用select標籤和有效的user_id s,所以你不需要驗證。

編輯,如果你想知道什麼是user_id S的不wait,使用類似的查詢:

SELECT user.userid 
FROM user 
LEFT JOIN wait ON user.userid=wait.userid 
WHERE ISNULL(wait.place_id) 

這些userid可以放入select -list。

+0

我有一個用戶表。只需用戶數據。用戶名是「place」表中唯一的額外列。除此之外,它具有發佈用戶的ID。這就是它。 – Ciprian 2012-02-01 14:47:38

+0

好吧...得到了固定我從表中刪除用戶現在唯一的信息是用戶名。 – Ciprian 2012-02-01 14:57:04

+0

請檢查我的編輯! – uzsolt 2012-02-01 15:21:56

0

你可以使用類似這樣的查詢:

這樣,如果user_id是在wait_table它會回報你的信息在客戶端上......如果不存在,它表,那麼應該返回null。

雖然我會篩選出我真正需要查詢的表字段。