• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SQL wyszukiwanie w tablicy

VPS Starter Arubacloud
0 głosów
74 wizyt
pytanie zadane 30 września 2020 w SQL, bazy danych przez michal_php Stary wyjadacz (13,700 p.)
edycja 30 września 2020 przez michal_php

Cześć.

Mam ma taką budowę MySql :

1) tabela -> samochody    

2) tabela -> części

samochody -> one to many -> części

I teraz ma coś takiego:

samochód-1A posiada relacje w częściach do silnik oraz koła

drugi zaś posiada:

samochód-2A posiada relacje w częściach do silnik, zawieszenie

oraz:

samochód-3A posiada relacje w częściach do silnik, zawieszenie, koła

I teraz każdy z naszych samochodów ma inna relację w tabeli części. Moje pytanie polega, że chcemy zrobić zapytanie w bazie na podstawie części czyli:

silnik, zawieszenie

i chcemy dostać tylko samochód 2A oraz 3A. 1A nie będzie ponieważ w jego relacji nie ma wszystkich naszych wyszukiwanych części.

próbowałem za pomocą :

SELECT * FROM samochód LEFT JOIN części
WHERE type IN (silnik, zawieszenie)

Ale przy tej konfiguracji dostaje wszystkie samochody.

Z góry bardzo dziękuje za podpowiedź.

komentarz 30 września 2020 przez adrian17 Ekspert (344,100 p.)
Pokaż schemę, bo teraz to co napisałeś nie ma zbytnio sensu. Raz 'silnik' używasz jak nazwę tabeli, raz jak wartość enuma w kolumnie.

Ale pierwsza intuicja, że po prostu przy left (czemu left?) joinie zgubiłeś warunek łączenia?
komentarz 30 września 2020 przez michal_php Stary wyjadacz (13,700 p.)

Dobra pomyliło mi się w moim zapytaniu powinno być:

SELECT * FROM samochód JOIN części
WHERE type IN (silnik, zawieszenie)

To jest cała relacja z mapowania (Samochód i części to tylko taki skrócony schemat myślowy)

Całe zapytanie wygląda mniej więcej tak:

SELECT mu FROM App\Entity\Mixture\MixtureUsage mu INNER JOIN mu.companyMixture cm INNER JOIN mu.companyDepartment companyDepartment INNER JOIN cm.genericMixture genericMixture INNER JOIN mu.mixture mixture INNER JOIN mixture.classification classification INNER JOIN mixture.supplier supplier INNER JOIN classification.pictograms pictograms WHERE cm.nr LIKE :nr AND mixture.name LIKE :name AND mu.density LIKE :density_kg_dm3 AND mixture.properties.density LIKE :density AND cm.maxUsage LIKE :max_amount AND mixture.originCountry LIKE :originCountry AND mixture.issuedAt LIKE :issued_at AND supplier.name LIKE :supplier_name AND mixture.avgLzo LIKE :avgLzoData AND pictograms.symbol IN (:symbol) AND mu.periodEnd >= :now AND mu.companyDepartment = :department AND mu.status IN (:status) ORDER BY cm.nr ASC

 

I wartości do zapytań:

 0 => Doctrine\ORM\Query\Parameter {#1188
        -name: "nr"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      1 => Doctrine\ORM\Query\Parameter {#1179
        -name: "name"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      2 => Doctrine\ORM\Query\Parameter {#1178
        -name: "density_kg_dm3"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      3 => Doctrine\ORM\Query\Parameter {#1180
        -name: "density"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      4 => Doctrine\ORM\Query\Parameter {#1181
        -name: "max_amount"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      5 => Doctrine\ORM\Query\Parameter {#1187
        -name: "originCountry"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      6 => Doctrine\ORM\Query\Parameter {#1177
        -name: "issued_at"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      7 => Doctrine\ORM\Query\Parameter {#1176
        -name: "supplier_name"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      8 => Doctrine\ORM\Query\Parameter {#1174
        -name: "avgLzoData"
        -value: "%%"
        -type: 2
        -typeSpecified: false
      }
      9 => Doctrine\ORM\Query\Parameter {#1172
        -name: "symbol"
        -value: array:2 [
          0 => "GHS02"
          1 => "GHS07"
        ]
        -type: 102
        -typeSpecified: false
      }
      10 => Doctrine\ORM\Query\Parameter {#1171
        -name: "now"
        -value: "2020-09-30"
        -type: 2
        -typeSpecified: false
      }
      11 => Doctrine\ORM\Query\Parameter {#1170
        -name: "department"
        -value: "718a3cec-2cec-46d3-a260-9728c0bb6903"
        -type: 2
        -typeSpecified: false
      }
      12 => Doctrine\ORM\Query\Parameter {#1169
        -name: "status"
        -value: array:3 [
          0 => 1
          1 => 2
          2 => 6
        ]
        -type: 101
        -typeSpecified: false
      }

To mniej więcej coś takiego 

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 1,857 wizyt
pytanie zadane 15 grudnia 2016 w SQL, bazy danych przez bartek7910 Obywatel (1,980 p.)
0 głosów
2 odpowiedzi 302 wizyt
pytanie zadane 11 sierpnia 2019 w SQL, bazy danych przez niezalogowany
0 głosów
2 odpowiedzi 1,861 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...