Помогите с запросом mysql

12
K
На сайте с 04.12.2012
Offline
2
759

есть 3 таблицы: star, star_option, post

мне надо вывести все поля из таблицы star и посчитать сколько постов соответствует данной звезде

SELECT * FROM star

SELECT COUNT(*) FROM post t1, star_option t2 WHERE t1.id = t2.id AND t2.star_id=

вот эти два запроса мне надо объединить подскажите как это сделать

siv1987
На сайте с 02.04.2009
Offline
427
#1

Зачем? Используйте два запроса. Они сами по себе разные

K
На сайте с 04.12.2012
Offline
2
#2

не так не получается надо их объединить и сгруппировать по star id

Станислав
На сайте с 27.12.2009
Offline
254
#3

Как вы себе это представляете?

Один запрос должен подсчитывать, а другой выводит новости

Мы там, где рады нас видеть.
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#4
не так не получается

почему не получиться?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
C
На сайте с 04.02.2005
Offline
291
#5

SELECT *

FROM star as s,

(SELECT COUNT(t1.*),t3.id FROM post t1, star_option t2, star t3 WHERE t1.id = t2.id AND t2.star_id= t3.id GROUP BY t3.id) as s1

WHERE s.id=s1.id

Не проверял

rbbumfirst
На сайте с 03.04.2009
Offline
87
#6

трудно лечить по фото.

структуру бы в студию.

Web developer (http://rudov.com). разработка на Go, ReactJS, React Native
дани мапов
На сайте с 06.09.2012
Offline
204
#7


SELECT *,
(SELECT COUNT(post.id) FROM post, star_option WHERE post.id = star_option.id AND star_option.star_id = star.id) AS count_post
FROM star

проверил, работает

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
C
На сайте с 04.02.2005
Offline
291
#8

А тут надо смотреть план запроса

дани мапов, у вас сначала происходит выборка из стар, затем считаются посты

В моем примере - выборка подготовлена заранее

K
На сайте с 04.12.2012
Offline
2
#9

ну щас я все объясню как у меня все работает

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

CREATE TABLE `star` (

`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`star` VARCHAR( 50 ) NOT NULL ,
`image` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM DEFAULT CHARSET = utf8;

и таблица star_option

CREATE TABLE  `star_option` (

`id_post` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`star_id` INT( 11 ) NOT NULL ,
PRIMARY KEY ( `id_post` )
) ENGINE = MYISAM DEFAULT CHARSET = utf8;

и таблица post

CREATE TABLE  `post` (

`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`post_date` DATE NOT NULL ,
`post_title` VARCHAR( 255 ) NOT NULL ,
`keywords` VARCHAR( 255 ) NOT NULL ,
`url_video` TEXT NOT NULL ,
`image` VARCHAR( 255 ) NOT NULL ,
`visits` INT( 11 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
KEY `post_date` ( `post_date` )
) ENGINE = INNODB DEFAULT CHARSET = utf8;

так вот star_option служит для объединения таблиц star и post

Мне надо так что бы было так на странице star.php делается выборка записей из таблицы star (выводились все звезды что есть и кол-во связанных с ним постов) Вооот. как то так

C
На сайте с 04.02.2005
Offline
291
#10

SELECT s.*,s1.co

FROM star as s

left join (SELECT COUNT(t1.id) as co,t3.id FROM post t1, star_option t2, star t3 WHERE t1.id = t2.id_post AND t2.star_id= t3.id GROUP BY t3.id) as s1

ON s.id=s1.id;

SELECT *,

(SELECT COUNT(post.id) FROM post, star_option WHERE post.id = star_option.id_post AND star_option.star_id = star.id) AS count_post

FROM star

Пробуйте любой и выбирайте подходящий

Первый - в случае отсутствия записей в post выдаст null

Второй - 0

12

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