Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос одновременно в две таблицы
 
 автор: RV   (12.11.2005 в 16:58)   письмо автору
 
 

Здрасте всем. Такая проблема. Личные сообщения. делаю запрос чтобы узнать сколько в папке входящие всего сообщений. Так вот в этой таблице есть поле От кого (from_userid) т.е. это не конкретное имя а id отправителя. а имя содержится в другой таблице с этим же id. так вот как бы одновременно запросить из таблицы с лс id отправителя, а из таблицы с юзерами имя юзеров, которому соответсвуют эти id ?

   
 
 автор: WebTech   (12.11.2005 в 17:52)   письмо автору
 
   для: RV   (12.11.2005 в 16:58)
 

Не знаю структуру твоих таблиц, но допустим у тебя есть таблица users, которая содержит userid и name и есть таблица comments, которая содержит from_userid, который равен userid из users и собственно comment, который оставляет юзер

select count(comments.comments), users.name from comments, users where users.userid=comments.from_userid group by users.name

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

   
 
 автор: cheops   (12.11.2005 в 22:46)   письмо автору
 
   для: RV   (12.11.2005 в 16:58)
 

Да действительно неплохо увидить структуру таблиц...

   
 
 автор: RV   (13.11.2005 в 10:12)   письмо автору
 
   для: cheops   (12.11.2005 в 22:46)
 


$db_pm - таблица с лс, в ней:
privmsgs_id // ид мессяги. автоинкремент
privmsgs_subject  //тема
privmsgs_from_userid //от кого
privmsgs_to_userid //кому
privmsgs_date // дата отправления

$db_users - таблица с юзерами. в ней:
user_id
username 

точнее надо узнать не сколько всего сообщений, а выбрать все, чтобы потом это отобразить

   
 
 автор: WebTech   (13.11.2005 в 13:28)   письмо автору
 
   для: RV   (13.11.2005 в 10:12)
 

Все сообщения, принадлежащие одному юзеру?
При условии, что privmsgs_from_userid = user_id запрос будет такой

select db_pm.privmsgs_subject, db_users.username from db_pm, db_users 
where db_pm.privmsgs_from_userid=db_users.user_id and db_users.username="_имя_"

где _имя_ - это имя юзера.
У тебя очень трудночитаемые названия таблиц и полей. Рекомендую использовать названия попроще, тогда разбираться будет легче (потом, если что :-))

   
 
 автор: Arkanum   (14.11.2005 в 21:55)   письмо автору
 
   для: WebTech   (13.11.2005 в 13:28)
 

Будьте любезны пояснить %-)
А каким макаром из такого селекта делается вывод?

Меня эта тема выборки текста из разных баз с таблицами имеющими одинаковые порядковые номера тоже интересует на данный момент.
Но переход от одного к другому иногда бывает сложным.
У меня сейчас делается выборка через цикл, типа:

while ($row = mysql_fetch_array($result)) {
...
};


Вывод ессно через $row['table']
На какой то момент это казалось достаточно удобным. Сейчас я понимаю что такой вариант нельзя применять к вашему изложению действий.

Можете что-нибудь по моему случаю сказать?
В общем - как выводить из вашего кода...

select db_pm.privmsgs_subject, db_users.username from db_pm, db_users
where db_pm.privmsgs_from_userid=db_users.user_id and db_users.username="_имя_"


...текст на страницу.

   
 
 автор: cheops   (15.11.2005 в 00:34)   письмо автору
 
   для: Arkanum   (14.11.2005 в 21:55)
 

Точно также, но обращаясь не к $row['privmsgs_subject'], а к $row['db_pm.privmsgs_subject'] или вводя псевдонимы для полей в запросе при помощи оператора AS
select db_pm.privmsgs_subject AS privmsgs_subject,
       db_users.username AS username
from db_pm, db_users 
where db_pm.privmsgs_from_userid=db_users.user_id and db_users.username="_имя_"

Тогда можно обращаться по псеводинму, указанному после ключевого слова AS.

   
 
 автор: Arkanum   (15.11.2005 в 01:45)   письмо автору
 
   для: cheops   (15.11.2005 в 00:34)
 

Всё перепроверил, а эта бесовская тема мне надоедает:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

   
 
 автор: cheops   (15.11.2005 в 03:26)   письмо автору
 
   для: Arkanum   (15.11.2005 в 01:45)
 

А у вас просто ошибка в SQL-запросе - лучше всегда проверять после выполнения запроса функцией mysql_query() - не возвратила ли база данных ошибку, иначе можно очень долго отлаживать код.
<?php
  $query 
"...";
  
$res mysql_query($query);
  if(!
$res) exit(mysql_error());
  while(
$result mysql_fetch_array($res))
  {
     ...
  }
?>

   
 
 автор: Arkanum   (15.11.2005 в 14:40)   письмо автору
 
   для: Arkanum   (15.11.2005 в 01:45)
 

Отлично. Спасибо. 3 минуты от отладил.
У меня ещё вопрос есть по теме близкой к этому.
При таком выводе из нескольких баз DESC LIMIT num не работает.
Какие есть способы ограничения вывода и вывод с последнего ID?

   
 
 автор: WebTech   (15.11.2005 в 15:00)   письмо автору
 
   для: Arkanum   (15.11.2005 в 14:40)
 

Как понять не работает?
LIMIT всего лишь ограничивает вывод результирующего набора записей, как бы ни был составлен запрос. Возможно запрос с сортировкой по убыванию неправильно составлен, до слова LIMIT?

   
 
 автор: Arkanum   (15.11.2005 в 15:14)   письмо автору
 
   для: Arkanum   (15.11.2005 в 14:40)
 

Точно. Совсем запутался с этими запросами. Разобрался :)
А вопрос по красоте можно задать? а то такой длинный запрос получается. Можно как сократить?

   
 
 автор: WebTech   (15.11.2005 в 16:43)   письмо автору
 
   для: Arkanum   (15.11.2005 в 15:14)
 

Никак его не сократишь :-( Только если имена таблиц и полей покороче придумать :-)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования