Автор Тема: Селекция на 2 таблици в една заявка  (Прочетена 1404 пъти)

madmad

  • Напреднали
  • *****
  • Публикации: 226
  • Distribution: Ubuntu, OpenSuse
  • Window Manager: Gnome 3.4
    • Профил
Искам да избера 2 таблици в една база данни и то да ги кръстосам по следния начин.

едната таблица е members другата е members_data

Избера да избера всички клетки m.member_id, m.username, m.picture от първата таблица където m.lastvisit> е дадено време и където клетката d.data_webcam от втората таблица съдържа 452

Ето с какво пробвам, но ми дава 1 резултата по няколко пъти, което ми подсказва че не работи

Код:
	$result = $DB->query("SELECT m.member_id, m.username, m.picture
FROM " . DB_PREFIX . "members as m, " . DB_PREFIX . "members_data AS d
WHERE m.lastvisit>" . (time() - $PREFS->conf['user_timeout']*60) . "AND d.data_webcam=452
LIMIT " . (($page - 1) * $broi_online . ", " . $broi_online));
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Селекция на 2 таблици в една заявка
« Отговор #1 -: Jun 08, 2010, 19:04 »
Ммм не трябва ли да ги JOIN-неш двете таблици? Или аз нещо не мога да разбера условието което си задал?!
« Последна редакция: Jun 08, 2010, 19:08 от backtolife »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

madmad

  • Напреднали
  • *****
  • Публикации: 226
  • Distribution: Ubuntu, OpenSuse
  • Window Manager: Gnome 3.4
    • Профил
Re: Селекция на 2 таблици в една заявка
« Отговор #2 -: Jun 08, 2010, 19:08 »
Аз ако знаех нямаше да питам :)
Активен

luda_glawa

  • Напреднали
  • *****
  • Публикации: 652
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Re: Селекция на 2 таблици в една заявка
« Отговор #3 -: Jun 08, 2010, 20:16 »
Липсва ти връзката м/у двете таблици. Има ли поле, което да е еднакво и при двете?

Примерно:

SELECT a.id, a.data, b.id, b.data FROM table_a AS a, table_b AS b WHERE a.user_id = b.user_id AND a.data > 123 AND b.data = 321;

Като цяло май с join-ове е по-елегантния начин. Нямам идея обаче, кой е по-бързия.
Активен

С Уважение:

Luda Glawa ;-)

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Re: Селекция на 2 таблици в една заявка
« Отговор #4 -: Jun 08, 2010, 20:23 »
Код:
SELECT  m.member_id, m.username, m.picture
FROM members AS m
INNER JOIN members_data AS d ON (d.member_id=m.id AND d.data_webcam=452)
WHERE m.lastvisit>"2010-06-08"
Това е при положение, че двете таблици са свързани с външен ключ - member_id във втората таблица. То на теб това и ти куца в заявката - в условиете WHERE ти липсва връзката между двете таблици, както е казал луда–глава.
Активен

madmad

  • Напреднали
  • *****
  • Публикации: 226
  • Distribution: Ubuntu, OpenSuse
  • Window Manager: Gnome 3.4
    • Профил
Re: Селекция на 2 таблици в една заявка
« Отговор #5 -: Jun 09, 2010, 10:34 »
Решението:

Код:
	$result = $DB->query("SELECT m.member_id, m.username, m.picture
 FROM " . DB_PREFIX . "members as m, " . DB_PREFIX . "members_data AS d
 WHERE m.member_id=d.data_id
 AND d.data_webcam=452
 AND m.lastvisit>" . (time() - $PREFS->conf['user_timeout']*60) . "
 LIMIT " . (($page - 1) * $broi_online . ", " . $broi_online));
Активен

chen_dzen

  • Напреднали
  • *****
  • Публикации: 623
  • Distribution: Debian 6.0 Squeeze
  • Window Manager: GNOME
    • Профил
Re: Селекция на 2 таблици в една заявка
« Отговор #6 -: Jun 12, 2010, 21:34 »
SELECT [имена на колони] FROM[таблица 1] INNER JOIN [таблица 2] ON [таблица 1.колона]=[таблица 2.колона]
или
(SELECT [имена на колони] FROM [таблица 1]) UNION (SELECT [имена на колони] FROM [таблица 2])
това е !
« Последна редакция: Jun 14, 2010, 09:52 от chen_dzen »
Активен