Использование left join (прошу помочь)

Тема в разделе "Базы данных", создана пользователем lamo, 18 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. lamo

    lamo Постоялец

    Регистр.:
    1 июл 2008
    Сообщения:
    51
    Симпатии:
    4
    Есть запрос вида:

    SELECT COUNT(a.id) as ecount,a.city,a.name FROM a
    LEFT JOIN c ON (c.unid=a.id)
    GROUP BY a.city,a.name
    ORDER BY ecount DESC


    Как добавить условие что бы выводились записи только удовлетворяющие a.city=1, где это я должен вставить условие?

    Всем заранее спасибо!
     
  2. lonejan

    lonejan Постоялец

    Регистр.:
    7 фев 2008
    Сообщения:
    110
    Симпатии:
    10
    SELECT COUNT(a.id) as ecount,a.city,a.name FROM a
    LEFT JOIN c ON (c.unid=a.id)
    WHERE a.city=1
    GROUP BY a.city,a.name
    ORDER BY ecount DESC
     
  3. agent_smit

    agent_smit Постоялец

    Регистр.:
    12 дек 2008
    Сообщения:
    60
    Симпатии:
    11
    Мона еще так:

    SELECT COUNT(a.id) as ecount,a.city,a.name FROM a
    LEFT JOIN c ON c.unid=a.id and a.city=1
    GROUP BY a.city,a.name
    ORDER BY ecount DESC
     
  4. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    195
    Симпатии:
    67
    НЕПРАВИЛЬНО
    INNER JOIN -будет работать
     
  5. juggernaut13

    juggernaut13 Постоялец

    Регистр.:
    23 авг 2009
    Сообщения:
    59
    Симпатии:
    16
    да ну? сработает
     
  6. qwerty

    qwerty Постоялец

    Регистр.:
    10 апр 2006
    Сообщения:
    75
    Симпатии:
    0
    что бы не плодить темы задам свой вопрос здесь.помогите с запросом ни чего не выходит выводится, но все не то.

    есть 2 таблици
    CREATE TABLE `Images`(
    `Image_Id` BIGINT(20) unsigned NOT NULL auto_increment,
    `pLeft` INT NOT NULL,
    `pTop` INT NOT NULL,
    `pWidth` INT unsigned NOT NULL,
    `pHeight` INT unsigned NOT NULL,
    PRIMARY KEY (`Image_Id`)
    ) TYPE=MyISAM;
    CREATE TABLE `Words`(
    `Word_Id` BIGINT(20) unsigned NOT NULL auto_increment,
    `User_Id` BIGINT(20) unsigned NOT NULL,
    `Image_Id` BIGINT(20) unsigned NOT NULL,
    `Found` INT DEFAULT 0,
    PRIMARY KEY (`Word_Id`)
    ) TYPE=MyISAM;

    нужно в одном запросе выбрать из Images все записи у которых в Words в поле Found стоит 0 и тех которых в таблице words нет
    , но есть в таблице images
    делал так
    $query = "SELECT distinct im.*, ws.* FROM Images as im,Words as ws WHERE im.Image_Id=ws.Image_Id and ws.Found='0'";
    и так
    $query = "SELECT im.*,ws.* FROM Images as im,Words as ws LEFT JOIN im ON (im.Image_Id=ws.Image_Id) WHERE and ws.Found='0'";

    в первом случае выводит информацию частично только о тех которые есть в таблице word со значением found = 0 а оставшиеся из images не выбирает.

    а вовтором случае говорит про неуникальность im не могу понять в чем дело.

    и с точки зрения быстроты работы стоит это разбить на два запроса или всетаки делать в одном?
     
  7. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Код:
    SELECT Im1.Image_Id, Im1.pLeft, Im1.pTop, Im1.pWidth, Im1.pHeight, Wor1.Found FROM Images AS Im1
    LEFT JOIN Words AS Wor1
    ON Im1.Image_Id = Wor1.Imag_Id
    WHERE Wor1.Found = 0 OR Wor1.Found IS NULL
    
    Если ничего не напутал, то работать должно так:
    всем полям из таблицы Images ставятся в соответствие поля из таблицы Words, если же такого соответствия нет, то из-за LEFT JOIN поля заполняются NULL значениями.
     
Статус темы:
Закрыта.