Пытаясь запросить две таблицы, и я не могу понять, как - PullRequest
1 голос
/ 01 февраля 2012

Первая - это таблица мест, где хранится общая информация, а вторая - это таблица ожидания, где пользователи регистрируются (например, список ожидания)

+---------+--------------+------+-----+-------------------+----------------+
| 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; и отображение данных на домашней странице. Что-то вроде этого:

<? 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; ?>

Не уверен, что лучше проверить идентификатор пользователя в модели, которая добавляет данные в таблицу ожидания, или проверить модель, которая собирает данные для домашней страницы. Из того, что я прочитал, второй вариант будет лучше. Или я должен использовать два отдельных запроса?

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Я думаю, что ваш дизайн базы данных неправильный: вы должны создать отдельную таблицу users с пользовательскими данными (имя, изображение, ...) плюс user_id. И еще одна таблица с «общей» информацией (как вы сказали): name, desc, map и т. Д. И в этой таблице не используется только пользовательская информация 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 -лист.

1 голос
/ 01 февраля 2012

Пожалуйста, ознакомьтесь с объединениями в избранных запросах. Похоже, вам нужно использовать левое внешнее соединение между вашей главной таблицей и вашей временной таблицей: http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php.

0 голосов
/ 01 февраля 2012

Вы можете использовать запрос, подобный следующему:

select * 
from wait_table 
left join general_info_table on wait_table.user_id = general_info_table.user_id
where wait_table.user_id = 1;

Таким образом, если идентификатор_пользователя находится в таблице ожидания, он вернет вам информацию о клиенте ... если он не существует вну, таблица должна возвращать ноль.

Я бы отфильтровал, какие поля таблицы мне действительно нужны из запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...