powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с сложным запросом... Голову уже сломал...
20 сообщений из 20, страница 1 из 1
Помогите с сложным запросом... Голову уже сломал...
    #39254673
Pelsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имею две таблицы 1-это таблица с украшениями. 2-это таблица, в которой перечислены камни,которые вставлены в украшения:

Таблица 1
IDназваниекартинка1кольцо1.jpg2серьги2.jpg3кулон3.jpg4кольцо4.jpg

Таблица 2
IDID_товаратип_камня13бриллиант23янтарь33рубин41бриллиант51янтарь61изумруд


Моя задача сделать выборку из первой таблицы где украшения с бриллиантами.
Запрос делаю такой:
Код: sql
1.
SELECT Таблица1.ID,Таблица1.картинка,Таблица2.ID_товара,Таблица2.тип_камня FROM Таблица1, Таблица2 WHERE Таблица1.ID = Таблица2.ID_товара AND тип_камня='бриллиант' order by Таблица1.ID desc LIMIT 20



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


НО! Когда я усложняю задачу:
Выбрать из первой таблицы все украшения, где есть бриллиант и янтарь - база выдает пустоту в ответ.

ЗАПРОС ДЕЛАЮ ТАКОЙ:
Код: sql
1.
SELECT Таблица1.ID,Таблица1.картинка,Таблица2.ID_товара,Таблица2.тип_камня FROM Таблица1, Таблица2 WHERE Таблица1.ID = Таблица2.ID_товара AND тип_камня='бриллиант' AND тип_камня='янтарь' order by Таблица1.ID desc LIMIT 20




Помогите решить задачу!
За помощь готов положить денег на телефон))
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39254685
Pelsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дали подсказку, что нужно использовать JOIN. Но весь вопрос в том - как использовать?
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39254711
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pelsh,
Код: sql
1.
2.
select ID, `название`, `картинка` from `Таблица 1` where id in 
(select `D_товара` from `Таблица 2` where `тип_камня`='бриллиант' or `тип_камня`='янтарь' group by 1 having count(*)=2);
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39255830
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во вложеном запросе, тоже красивше IN поставить
Вариант retvizan 'а с IN:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select ID, `название`, `картинка` 
from `Таблица 1` 
where id in 
  (select `D_товара` 
   from   `Таблица 2` 
   where  `тип_камня` IN ('бриллиант', 'янтарь')
   group by 1 
   having count(*)=2
  );
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39255877
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше вообще не использовать подзапрос.
Код: sql
1.
2.
3.
4.
5.
SELECT t1.ID, t1.`название`, t1.`картинка`
FROM `Таблица 1` t1, `Таблица 2` t2
WHERE t1.ID = t2.ID_товара AND t2.`тип_камня` IN ('бриллиант', 'янтарь')
GROUP BY t1.ID /* , t1.`название`, t1.`картинка` */
HAVING COUNT( /* DISTINCT */ t2.`тип_камня`) = 2
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256470
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
???
что же вы так людей пугаете?
Код: sql
1.
select nazv from tbl1 join tbl2 on tbl1.id=tbl2.id_nazv where core_type like "бриллиант";


и все!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
t

mysql> select nazv from tbl1 join tbl2 on tbl1.id=tbl2.id_nazv where core_type like "бриллиант";
+---------+
| nazv    |
+---------+
| кольцо1 |
| кулон   |
+---------+
2 rows in set

mysql> 



Я протестировал! Реуль будет кольцо которое первым указано в тбл и кулон.

Называть полЯ одинаковыми именами - это не совсем хорошо. (+ есть ДВА кольца в столбике.)
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256475
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблицы:
http://itmages.ru/image/view/4421324/8a77bbbc

http://itmages.ru/image/view/4421323/e8d8285f

---
Только я не в курсе относительно оптимизации такого (моего) запроса.
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256483
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
mysql> select nazv from tbl1 join tbl2 on tbl1.id=tbl2.id_nazv where core_type like "бриллиант" or core_type like "янтарь" group by nazv
;
+---------+
| nazv    |
+---------+
| кольцо1 |
| кулон   |
+---------+
2 rows in set
mysql> 


вот янтарь и бриллианты.
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256559
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinЯ протестировал!
Я плакаль!
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256619
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

всмысле? что не так? или все не так? я же выше и таблицы привел.
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256635
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что не так?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
mysql> select sql_no_cache nazv from tbl1 join tbl2 on tbl1.id=tbl2.id_nazv where core_type like "бриллиант";
+---------------+
| nazv          |
+---------------+
| кольцо1       |
| кулон         |
+---------------+
2 rows in set (0.00 sec)

mysql> SHOW STATUS LIKE  'last_query_cost';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| Last_query_cost | 5.799000 |
+-----------------+----------+
1 row in set (0.00 sec)

mysql> explain select sql_no_cache nazv from tbl1 join tbl2 on tbl1.id=tbl2.id_nazv where core_type like "бриллиант";
+----+-------------+-------+------+---------------+---------+---------+-------------+------+-------------+
| id | select_type | table | type | possible_keys | key     | key_len | ref         | rows | Extra       |
+----+-------------+-------+------+---------------+---------+---------+-------------+------+-------------+
|  1 | SIMPLE      | tbl1  | ALL  | PRIMARY,id    | NULL    | NULL    | NULL        |    4 |             |
|  1 | SIMPLE      | tbl2  | ref  | id_nazv       | id_nazv | 4       | mbs.tbl1.id |    1 | Using where |
+----+-------------+-------+------+---------------+---------+---------+-------------+------+-------------+
2 rows in set (0.00 sec)

mysql>   



хотя я не тестировал вашыи примеры. может они и круче?
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256640
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaaliskinЯ протестировал!
Я плакаль!радоваться надо, товарищ не пургу гонит, а за базар отвечает :)
ответственный, а опыт нарастёт

aliskin
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
mysql> select nazv from tbl1 join tbl2 on tbl1.id=tbl2.id_nazv where core_type like "бриллиант" or core_type like "янтарь" group by nazv
;
+---------+
| nazv    |
+---------+
| кольцо1 |
| кулон   |
+---------+
2 rows in set
mysql> 


вот янтарь и бриллианты.сами догадаетесь почему ваш запрос в конкретно этом примере дает правильный ответ?
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256645
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
retvizan,

к сожалению не догадаюсь :( та и догадываться не правильно. Нужно больше знаний и понимания.

В каких случаях запрос будет врать? Может этосвязаено с группировкой данных? (нехочу не получится у меня догадываться - я же не гаддалка)
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256680
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskin , добавь во вторую таблицу ещё три записи:
ID ID_товара тип_камня7 2 бриллиант8 4 изумруд9 4 бриллиантПотом протестируй свой "гениальный" запрос.
retvizanрадоваться надо, товарищ не пургу гонит, а за базар отвечает :)
Вот счас и посмотрим...
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256683
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавил.
на бумаге посчитаю.
вот результат, но я щас на пальцах посчитаю.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ne 3
mysql> select nazv from tbl1 join tbl2 on tbl1.id=tbl2.id_nazv where core_type like "бриллиант" or core_type like "янтарь" group by nazv;
+---------+
| nazv    |
+---------+
| кольцо1 |
| кольцо2 |
| кулон   |
+---------+
3 rows in set
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256689
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибочка, ас исравлю блилинат.
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256691
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
mysql> select nazv from tbl1 join tbl2 on tbl1.id=tbl2.id_nazv where core_type like "бриллиант" or core_type like "янтарь" group by nazv;
+---------+
| nazv    |
+---------+
| кольцо1 |
| кольцо2 |
| кулон   |
| серьги  |
+---------+
4 rows in set

mysql> 



вот все ж правильно?
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256692
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinвот все ж правильно?
И все 4, как и просил автор темы,
PelshВыбрать из первой таблицы все украшения, где есть бриллиант и янтарь
Убеждён?
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256693
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

авторВыбрать из первой таблицы все украшения, где есть бриллиант и янтарь - база выдает пустоту в ответ.
признаю свой грех.
...
Рейтинг: 0 / 0
Помогите с сложным запросом... Голову уже сломал...
    #39256694
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вполне понял, но дальше вести дисскус не хочу. не вник в суть вопроса.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с сложным запросом... Голову уже сломал...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]