Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Nadpisywanie pustych kolumn, wartosciami z innej tabeli
Octobus
post 28.03.2018, 12:51:31
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

Ostrzeżenie: (0%)
-----


Mam 2 bazy danych produktow. W `produkty_dane` sa wszystkie dane i produkty a w `produkty_przypisane` sa tylko wybrane produkty, ma te same kolumny, ale np. cena, opis albo tytul moga byc zmieniane. Pytanie wiec jak pobrac najszybciej dane z tabeli `produkty_przypisane` zeby puste kolumny byly uzupelnione tymi z `produkty_dane` ? Wiem jak to zrobic w php ale przy tysiacach produktow to dosc duzo warunkow zeby sprwadzac, moze znacie jakis szybki sposob, cos jak left join z nadpisywaniem pustych wartosci z drugiej kolumny.
Go to the top of the page
+Quote Post
trueblue
post 28.03.2018, 12:54:47
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Jeśli chcesz pobrać tylko produkty przypisane, to INNER JOIN.
A kolumna cena liczona jako:
  1. IFNULL(produkty_przypisane.cena, produkty_dane.cena) AS cena


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 28.03.2018, 12:56:22
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Pokaż strukturę tabelek.
Go to the top of the page
+Quote Post
Octobus
post 28.03.2018, 13:03:04
Post #4





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

Ostrzeżenie: (0%)
-----


  1. CREATE TABLE `produkty_dane` (
  2. `id` int(11) NOT NULL,
  3. `id_produktu` int(11) NOT NULL,
  4. `nazwa` varchar(250) COLLATE utf8_polish_ci NOT NULL,
  5. `opis` text COLLATE utf8_polish_ci NOT NULL,
  6. `cena` decimal(8,2) NOT NULL,
  7. `zdjecia` text COLLATE utf8_polish_ci NOT NULL,
  8. `aktywny` tinyint(1) NOT NULL
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


druga tabela jest taka sama, tylko wszedzie ma dane

Ten post edytował Octobus 28.03.2018, 13:04:01
Go to the top of the page
+Quote Post
Pyton_000
post 28.03.2018, 13:16:10
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


albo tak:

  1. SELECT COALESCE(p1.nazwa, p2.nazwa), COALESCE(p1.opis, p2.opis) FROM produkty_przypisane p1
  2. JOIN produkty p ON(p1.id_produktu = p.id)
  3. LEFT JOIN produkty_dane p2 ON(p2.id = p1.id)


Możesz sobie z takiego zapytanie zrobić VIEW i używać normalnego SQL.
Go to the top of the page
+Quote Post
trueblue
post 28.03.2018, 13:35:12
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Skoro druga tabela jest taka sama, to raczej użycie IFNULL czy COALESCE odpada, bo jakim cudem miałbyś w kolumnach tekstowych czy cenie NULL?
Jakie masz wartości przy brakach?


--------------------
Go to the top of the page
+Quote Post
Octobus
post 28.03.2018, 13:37:40
Post #7





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

Ostrzeżenie: (0%)
-----


@trueblue rzeczywiscie, masz racje. Polecenia nie dzialaja. W przypadku pustych wartosci, mam po prostu pusta wartosc, nie ma null, potrzebuje wiec cos innego, za szybko kliknalem pomogl ...
mimo tego naprowadziliscie mnie na rozwiazanie ktore dziala:
Kod
IF(`p`.`nazwa` IS NULL or `p`.`nazwa` = '', `b`.`nazwa`, `p`.`nazwa`) as `nazwa`

dziekuje

Ten post edytował Octobus 28.03.2018, 13:42:25
Go to the top of the page
+Quote Post
Pyton_000
post 28.03.2018, 13:45:40
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Zawsze możnaby ustawić nullable w drugiej tabeli wtedy nie byłoby problemu.
Go to the top of the page
+Quote Post
trueblue
post 28.03.2018, 13:56:16
Post #9





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. IF(COALESCE(`p`.`nazwa`,'')='', `b`.`nazwa`, `p`.`nazwa`) AS `nazwa`


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 08:07