Выбока из sql таблиц, как правильно?

12
seosniks
На сайте с 13.08.2007
Offline
389
787

Добрый вечер.

Подскажите пожалуйста, как исправить.

есть таблица A

есть балица B

A stars_s со значением 1

B stars_b имеет значения 1 и 2

при выборке A.stars_s=B.stars_b

срабатывает только 1. Мне же надо оба вывести.

Если я добавлю в таблицу B еще одно значение то будет выводитьс я две.

Как составить условие которое будет отрабатывать как пр 0 так и при 1 -2 -3 100 итд.

такое значение будет корректно? A.stars_s=B.stars_b >='0'

Спасибо.

vandamme
На сайте с 30.11.2008
Offline
675
#1
seosniks:
B stars_b имеет значения 1 и 2

при выборке A.stars_s=B.stars_b

срабатывает только 1. Мне же надо оба вывести.

зачем там тогда вообще что-то сравнивать/присваивать?

db_query("SELECT stars_b FROM {В} WHERE stars_b > %d", 0);

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#2
B stars_b имеет значения 1 и 2

Это как так?

2 записи, или 1?

Покажите на пальцах че надо;)

Подпись))
B
На сайте с 18.03.2008
Offline
47
#3

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

дани мапов
На сайте с 06.09.2012
Offline
204
#4

((A.stars_s=B.stars_b AND B.stars_b=1) OR B.stars_b > 1)

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
seosniks
На сайте с 13.08.2007
Offline
389
#5
Милованов Ю.С:
Это как так?
2 записи, или 1?
Покажите на пальцах че надо;)

может не иметь записей2

а может меть 1000

так вот если записей нет то выборрка не происходит.

А мне надо чтоб при 0 и при 1000 работала выборка.

IL
На сайте с 20.04.2007
Offline
435
#6
seosniks:
может не иметь записей2

Вы бы структуру таблиц выложили.. Достаточно полей, по которым таблицы предполагается связывать (Foreign Keys которые).. А то кто кого имеет - не совсем ясно...

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
seosniks
На сайте с 13.08.2007
Offline
389
#7
bookback:
Если других условий для связки таблиц нет, то не понятно зачем в таком виде их вообще связывать.

Затем что если в таблице B нет вообще строк то таблица а

не выводит ничего

Скажем так.

таблица A это пользователи

таблица B это деньги пользователей.

так вот если у пользователя под ID 1 денег нет то он не выводится.

А мне надо чтоб он выводился с нулевым значением.

И еще вопрос как лучше выводить другие талдицы чтобы связывать их?

Если я их буду связывать через and это нормально?

Тоесть выборка идет из всех таблиц.

Главная таблица, пусть это будет табель работников

rabotnik id sity money

1 1 1

далее идут таблицы из которых берутся все данные для таблицы rabotnik

id это автоинкремент

sity id sity_id

99 москва

money

id summa

34 4000

---------- Добавлено 18.03.2013 в 12:19 ----------

bookback:
Если других условий для связки таблиц нет, то не понятно зачем в таком виде их вообще связывать.
ivan-lev:
Вы бы структуру таблиц выложили.. Достаточно полей, по которым таблицы предполагается связывать (Foreign Keys которые).. А то кто кого имеет - не совсем ясно...

rabotnik имеет все другие таблицы.

Пример показал

---------- Добавлено 18.03.2013 в 12:25 ----------

Скажу проще.

если при голосовании, в таблице рейтинга нет строк

то таблица не выводит анкету.

Так как условие будет 0.

Вот надо делать проверку, если там нет ничего то выводим ноль.

Я с таким столкнулся в доске джокера, когда писал парсеры.

Там была таблица, не помню какая, так вот там должна быть хоть одна запись

иначе падал сервак. )))

Я пока это определил пол дня потерял.

iqmaker
На сайте с 17.04.2012
Offline
342
#8

Вам видимо нужен left join

---------- Добавлено 18.03.2013 в 12:46 ----------

т.е. как-то так:


create table A ( `id` int (11) );
create table B ( `id` int (11) );

select A.id, B.id FROM A LEFT JOIN ( B ) ON A.id = B.id WHERE A.id<3;

Выведутся все значения из таблицы А, даже если в Б их нет, но если есть - то из Б тоже выведутся.

IL
На сайте с 20.04.2007
Offline
435
#9
seosniks:
Пример показал

В вашем примере либо у второй таблицы что-то непонятное с первичным ключом, либо больше одной записи с одним id она иметь не сможет.

А так - да, смотрите в сторону LEFT JOIN (ну или Right JOIN, т.к. в первом посте в таблице A записей нет.. )

seosniks
На сайте с 13.08.2007
Offline
389
#10
ivan-lev:
В вашем примере либо у второй таблицы что-то непонятное с первичным ключом, либо больше одной записи с одним id она иметь не сможет.

А так - да, смотрите в сторону LEFT JOIN (ну или Right JOIN, т.к. в первом посте в таблице A записей нет.. )

Скажите пожалуйста что будет более лучше в плане быстродействия и нагрузки.

Примеры

1) SELECT t1.id, t2.id FROM `t1`,`t2` WHERE t1.name = 'vasya' AND t2.name = 'vasya'

2) SELECT t1.id, t2.id FROM `t1` JOIN `t2` USING(id) WHERE `name` = 'vasya'

если взять основную таблицу которая ссылается на все другие таблицы и

связать с помощью AND,

или JOIN будет лучше?

12

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