尝试查询两个表,我无法弄清楚如何

问题描述:

第一类是一般的信息存放地表,第二个是等待表,用户注册(如等待名单)尝试查询两个表,我无法弄清楚如何

+---------+--------------+------+-----+-------------------+----------------+ 
| 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或在该主页抓取数据对模型进行检查。从我读过的内容来看,第二种选择会更好。或者我应该使用两个单独的查询?

我认为你的数据库设计是错误的:你应该创建单独的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

请阅读所选查询中的连接。看起来您需要在主表和临时表之间使用左外连接:http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

你可以使用类似这样的查询:

这样,如果user_id是在wait_table它会回报你的信息在客户端上......如果不存在,它表,那么应该返回null。

虽然我会筛选出我真正需要查询的表字段。