Mam dwie tabele
Tabela vgk0u_zlecenia_offer:
CREATE TABLE IF NOT EXISTS `vgk0u_zlecenia_offer` (
`offer_id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` INT(11) NOT NULL,
`customer_id` INT(11) NOT NULL,
`payment_method_id` INT(11) NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
`comments` TEXT COLLATE utf8_unicode_ci DEFAULT NULL,
`create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`published` TINYINT(4) DEFAULT 1,
`checked_out` INT(11) NOT NULL,
`checked_out_time` DATETIME NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `vgk0u_users`(`id`),
FOREIGN KEY (`payment_method_id`) REFERENCES `vgk0u_zlecenia_payment_method`(`payment_method_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Zawartośc tabeli vgk0u_zlecenia_offer:
offer_id | user_id | customer_id | payment_method_id | price | comments | create_time | update_time | published | checked_out | checked_out_time |
---|---|---|---|---|---|---|---|---|---|---|
1 | 860 | 45064 | 5 | 6496.42 | UwagiDoOferty | 2019-06-25 1353 | 2019-06-25 1353 | 1 | 0 | 0000-00-00 0000 |
2 | 860 | 45064 | 5 | 6496.42 | UwagiDoOferty | 2019-06-25 1353 | 2019-06-25 1353 | 1 | 0 | 0000-00-00 0000 |
Tabela vgk0u_zlecenia_order:
CREATE TABLE IF NOT EXISTS `vgk0u_zlecenia_order` (
`order_id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`offer_id` INT(11) NOT NULL,
`i_index` INT(11) NOT NULL,
`order_index` VARCHAR(16) NOT NULL,
`added_to_crm` TINYINT(4) NOT NULL DEFAULT 0,
`create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (`offer_id`) REFERENCES `vgk0u_zlecenia_offer`(`offer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Zawartośc tabeli vgk0u_zlecenia_order:
order_id | offer_id | i_index | order_index | added_to_crm | create_time | update_time |
---|---|---|---|---|---|---|
1 | 1 | 0 | INDEXZLECENIA | 0 | 2019-06-25 1342 | 2019-06-25 1342 |
Treść mojego zapytania wygląda następująco:
SELECT `OF`.`offer_id`,
`OF`.`customer_id`,
`OF`.`price`,
`OF`.`update_time`,
COUNT((
SELECT `order_id`
FROM `vgk0u_zlecenia_order`
WHERE `offer_id` = `OF`.`offer_id`
)) AS `orders`
FROM `vgk0u_zlecenia_offer` AS `OF`,
`vgk0u_zlecenia_order` AS `OR`
WHERE `OF`.`user_id` = 860;
Wynik powyższego zapytania:
offer_id | customer_id | price | update_time | orders |
---|---|---|---|---|
1 | 45064 | 6496.42 | 2019-06-25 1205 | 1 |
Mój problem polega na tym, iż chciałbym wyświetlić ile rekordów z tabeli vgk0u_zlecenia_order
jest przypisanych do rekordów z tabeli vgk0u_zlecenia_offer
. Złączenie następuje poprzez offer_id
. Pierwszy rekord wyświetla mi się prawidłowo, gdyż funkcja COUNT
zawraca 1
i ten rekord się wyświetla. Nie wyświetla mi się natomiast drugi rekord, w tym wypadku wartość zwracana przez COUNT
powinna wynosić 0
. Czyli chciałbym aby ilość zwracanych rekordów była taka sama jak ilość rekordów w tabeli vgk0u_zlecenia_offer
. Jeżeli jest takich rekordów 0
, to wtedy 0
, jeżeli więcej niż 0
to konkretna liczba, ile takich rekordów występuję. Czy wie ktoś w jaki sposób powinienem przerobić moje zapytanie, aby uzyskać pożądany przeze mnie efekt? Mam nadzieje, że wszystko jest jasno opisane. Pozdrawiam.