Skocz do zawartości

Zdjęcie
- - - - -

Wyciąganie produktów z bazy Presta shop.


29 odpowiedzi w tym temacie
  • Zaloguj się, aby dodać odpowiedź
zonic

    WT Elite

  • 2 911 postów
    • Czas spędzony online: 134d 2h 28m 23s
472
Znakomita!
  • LocationToruń

Napisano 14 lipca 2014 - 14:59

#21

Faktycznie, no to dupa :<

Ok, postaram się skombinować normalny dostęp do SQL. 
Na dzisiaj kończę :) Dzięki za pomoc


  • 0

zonic

    WT Elite

  • 2 911 postów
    • Czas spędzony online: 134d 2h 28m 23s
472
Znakomita!
  • LocationToruń

Napisano 16 lipca 2014 - 07:20

#22

Zbyt szybko się cieszyłem, że udało mi się  dojść  do ładu poprzez regexy.
Zdjęcie nie pasuje do produktu.

O ile się nie mylę, to ma ono inne ID niż produkt?


  • 0

zonic

    WT Elite

  • 2 911 postów
    • Czas spędzony online: 134d 2h 28m 23s
472
Znakomita!
  • LocationToruń

Napisano 16 lipca 2014 - 09:44

#23

UPDATE: Kto mi pomoże w tym zapytaniu podmienić fragment, pobierający dane do kolumny image_link

SELECT p.id_product, pl.name, p.price, p.condition, p.available_for_order, pl.description , c.name as category_name,
concat('www.nazwasklepu.com/index.php?controller=product&id_product=',p.id_product) as full_link,
concat( 'www.www.nazwasklepu.com', '/img/p/',mid(p.id_product,1,1),'/', if (length(p.id_product)>1,concat(mid(p.id_product,2,1),'/'),''),if (length(p.id_product)>2,concat(mid(p.id_product,3,1),'/'),''),if (length(p.id_product)>3,concat(mid(p.id_product,4,1),'/'),''),if (length(p.id_product)>4,concat(mid(p.id_product,5,1),'/'),''), p.id_product, '.jpg' ) AS image_link
FROM ps_product p 
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product) 
LEFT JOIN ps_category_lang c ON (p.id_category_default = c.id_category)
WHERE p.active = 1 AND pl.id_lang = 1

Na taki, który będzie pobierać dane z poniższych tabel, w poniższej formie.

 Mam tabelę: ps_image_lang

id_image     id_lang	 legend
2	     1	         fotel_maja_chrom.jpg
3	     1	         fotel_maja_drewno.jpg
6	     1	         pufa_okragla.jpg

Oraz tabelę ps_image:

id_image	id_product	position	cover
2	        63	        1	        1
3	        64	        1	        1
6	        67	        2	        0

Muszę na podstawie ID produktu wybrać ID obrazka i stworzyć  link postaci:

 

http://nazwasklepu.com/"id_image"-home_default/"legend".jpg

gdzie "id_image" i "legend"  to komórki z tabeli ps_image_lang

PS: Nie cierpię złączeń. Pamiętam, że poprawiałem na przedmiocie z Oracla kolokwium z zapytaniami tego typu xD


UPDATE2:

Próbowałem coś takiego:

 

SELECT p.id_product, pl.name, p.price, p.condition, p.available_for_order, pl.description , cl.name as category_name,
concat('www.xxx.com/index.php?controller=product&id_product=',p.id_product) as full_link,
concat('www.x.com/',il.id_image,'-large_default/',il.legend,'.jpg') AS image_link
FROM ps_product p 
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product) 
LEFT JOIN ps_category_lang cl ON (p.id_category_default = c.id_category)
LEFT JOIN ps_image i ON(p.id_product = i.id_product)
LEFT JOIN ps_image_lang il ON (i.id_image = il.id_image)
WHERE p.active = 1 AND pl.id_lang = 1

Próbowałem też ostatnie dwa złączenia zrobić alternatywnie z INNER JOINEM, ale no abla :(


Użytkownik zonic edytował ten post 16 lipca 2014 - 10:48
UPDATE

  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 16 lipca 2014 - 10:56

#24

Ta druga tabela jest niepotrzebna, można wykorzystać generowanie linków do img:

SELECT p.id_product, pl.name, p.price, p.condition, p.available_for_order, pl.description , c.name as category_name,
concat('www.nazwasklepu.com/index.php?controller=product&id_product=',p.id_product) as full_link,
concat( 'www.www.nazwasklepu.com', '/img/p/',mid(pi.id_image,1,1),'/', if (length(pi.id_image)>1,concat(mid(pi.id_image,2,1),'/'),''),if (length(pi.id_image)>2,concat(mid(pi.id_image,3,1),'/'),''),if (length(pi.id_image)>3,concat(mid(pi.id_image,4,1),'/'),''),if (length(pi.id_image)>4,concat(mid(pi.id_image,5,1),'/'),''), pi.id_image, '.jpg' ) AS image_link
FROM ps_product p 
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product) 
LEFT JOIN ps_category_lang c ON (p.id_category_default = c.id_category)
RIGHT JOIN ps_image pi ON (pi.id_product = p.id_product)
WHERE p.active = 1 AND pl.id_lang = 1 AND pi.cover = 1

Jakby dalej było coś nie tak to wal :D


  • 1

webDeveloper


zonic

    WT Elite

  • 2 911 postów
    • Czas spędzony online: 134d 2h 28m 23s
472
Znakomita!
  • LocationToruń

Napisano 16 lipca 2014 - 11:02

#25

Hmm. Wydaje się, że linki są dobre :)

Wytłumaczysz mi teraz skąd wziąłeś te ID, jeśli między ID zdjęcia, a ID produktu nie ma żadnej zależności? :P

UPDATE:

w ogóle nie mam pojęcia skąd ta struktura: 

"img/p/4/8/48.jpg"

Ale to zapewne jakaś cecha presty ;p


  • 0

vms

    Użytkownik

  • 81 postów
    • Czas spędzony online: 5h 33m 5s
28
Bardzo dobra

Napisano 16 lipca 2014 - 11:27

#26

Taka ścieżka jest po to żeby nie wrzucać wszystkiego do jednego katalogu, tak łatwiej je przeglądać. Total commander ma (przynajmniej kiedyś miał) problem z odczytem zbyt dużej ilości plików w katalogu i mógłbyś nie odczytać zawartości katalogu przy dużej ilości plików.

W ten spodób pliki rozkładają się na katalogi wg ID. dla 57.jpg będzie to "img/p/5/7/57.jpg

 

 

Wytłumaczysz mi teraz skąd wziąłeś te ID, jeśli między ID zdjęcia, a ID produktu nie ma żadnej zależności? :P

 

relacja jest w ps_image


Użytkownik vms edytował ten post 16 lipca 2014 - 11:34

  • 1

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 16 lipca 2014 - 11:33

#27

Wytłumaczysz mi teraz skąd wziąłeś te ID, jeśli między ID zdjęcia, a ID produktu nie ma żadnej zależności?

jest zależność:

RIGHT JOIN ps_image pi ON (pi.id_product = p.id_product)

Choć w sumie to 'RIGHT' tutaj jest zbędne. Nie potrzebna jest ta druga tabela ps_image_lang.

 

 

 


w ogóle nie mam pojęcia skąd ta struktura: 

Tak presta układa grafiki, a czemu? Zapewne z powodu opisanego przez vms :) Choć kto ich tam wie :P


Użytkownik unbreak edytował ten post 16 lipca 2014 - 11:33

  • 1

webDeveloper


zonic

    WT Elite

  • 2 911 postów
    • Czas spędzony online: 134d 2h 28m 23s
472
Znakomita!
  • LocationToruń

Napisano 16 lipca 2014 - 11:43

#28


jest zależność:


Znaczy nie do końca o to mi chodziło, to że jest do danego id produktu przypisane id obrazka to ja widzę. 

Bardziej mi chodziło o to, że id obrazka w żaden sposób nie wynika z id produktu. Czyli nie jest to ten sam numer. Nie jest to numer o 100 większy, czy coś. Ale nie ma to większego znaczenia ;p

Gdybym wiedział, że na podstawie id obrazka można znaleźć link do niego, to pewnie jakoś bym sobie poradził :P Myślałem, że trzeba znać nazwę pliku (tak jak jak to próbowałem zrobić), która zapisana jest w tabeli ps_image_lang ;p

Czyli w sumie jedno złączenie mniej. 

Tak, czy siak, dzięki wielkie :P
  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 16 lipca 2014 - 12:34

#29

No nie ma zależności, bo do jednego produktu możesz podpiąć wiele grafik :)


  • 0

webDeveloper


jpn

    Nowy użytkownik

  • 1 postów
0
Neutralna

Napisano 24 lutego 2015 - 15:12

#30

 kod sql uzytkownika unbreak ponizej

Wszystko w cytowanym kodzie pod phpmyadmin dziala poza description ta kolumna jest u mnie pusta a jest dla mnie jedna z wazniejszych

SELECT p.id_product, pl.name, p.price, p.condition, p.available_for_order, pl.description , c.name as category_name,
concat('www.nazwasklepu.com/index.php?controller=product&id_product=',p.id_product) as full_link,
concat( 'www.www.nazwasklepu.com', '/img/p/',mid(pi.id_image,1,1),'/', if (length(pi.id_image)>1,concat(mid(pi.id_image,2,1),'/'),''),if (length(pi.id_image)>2,concat(mid(pi.id_image,3,1),'/'),''),if (length(pi.id_image)>3,concat(mid(pi.id_image,4,1),'/'),''),if (length(pi.id_image)>4,concat(mid(pi.id_image,5,1),'/'),''), pi.id_image, '.jpg' ) AS image_link
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_category_lang c ON (p.id_category_default = c.id_category)
RIGHT JOIN ps_image pi ON (pi.id_product = p.id_product)
WHERE p.active = 1 AND pl.id_lang = 1 AND pi.cover = 1

Chcialbym zeby u mnie wygladal tak

dodac kolumne pl.description_short  i usunac full_link co wyswietla pelen url id_product

Niby powinno to wygladac tak wg mnie (pojecie o skladni sql zerowe mam i pewnie tu lezy przyczyna)

SELECT p.id_product, pl.name, p.price, p.condition, p.available_for_order, pl.description, pl.description_short, c.name as category_name,
concat( 'projekt.pl', '/img/p/',mid(pi.id_image,1,1),'/', if (length(pi.id_image)>1,concat(mid(pi.id_image,2,1),'/'),''),if (length(pi.id_image)>2,concat(mid(pi.id_image,3,1),'/'),''),if (length(pi.id_image)>3,concat(mid(pi.id_image,4,1),'/'),''),if (length(pi.id_image)>4,concat(mid(pi.id_image,5,1),'/'),''), pi.id_image, '.jpg' ) AS image_link
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_category_lang c ON (p.id_category_default = c.id_category)
RIGHT JOIN ps_image pi ON (pi.id_product = p.id_product)
WHERE p.active = 1 AND pl.id_lang = 1 AND pi.cover = 1

no ale po wykonaniu kodu i tak kolumny description, description_short sa puste (bledow zadnych nie wywala)

z kolei przy wykonaniu takiego kodu

znaleziony gdzies w odmetach internetu

SELECT p.id_product AS 'ID',
p.active AS 'Active (0/1)',
pl.name AS 'Name',
p.id_category_default AS 'Default Category',
p.price AS 'Price tax excl.',
p.id_tax_rules_group AS 'Tax rules ID',
p.wholesale_price AS 'Wholesale price',
p.reference AS 'Reference #',
p.quantity AS 'Quantity',
pl.description_short AS 'Short description',
pl.description AS 'Description',
pl.meta_title AS 'Meta-title',
pl.meta_keywords AS 'Meta-keywords',
pl.meta_description AS 'Meta-description',
pl.available_now AS 'Text when in stock',
pl.available_later AS 'Text when backorder allowed',
p.available_for_order AS 'Available for order',
p.date_add AS 'Product creation date',
p.show_price AS 'Show price',
p.online_only AS 'Available online only',
p.condition AS 'Condition',
concat( 'http://', ifnull( conf.value, 'projekt.pl' ) , '/img/p/',mid(p.id_product,1,1),'/', if (length(p.id_product)>1,concat(mid(p.id_product,2,1),'/'),''),if (length(p.id_product)>2,concat(mid(p.id_product,3,1),'/'),''),if (length(p.id_product)>3,concat(mid(p.id_product,4,1),'/'),''),if (length(p.id_product)>4,concat(mid(p.id_product,5,1),'/'),''), p.id_product, '.jpg' ) AS url_image
FROM ps_configuration conf, ps_product p
INNER JOIN ps_product_lang pl ON p.id_product = pl.id_product
LEFT JOIN ps_supplier_lang sl ON p.id_supplier = sl.id_supplier
LEFT JOIN ps_manufacturer_lang ml ON p.id_manufacturer = ml.id_manufacturer
WHERE conf.name = 'PS_SHOP_DOMAIN'

kolumny description, description_short i reszte wyswietla juz prawidlowo przy pogladzie w phpmyadmin ale przy eksporcie do pliku cos sie zapetla i pobiera sie plik ktory wazy kilkaset mb zamiast max 10mb i nie idzie tego odtworzyc

Jakies pomysły?

Z góry dzięki za odpowiedź


Użytkownik jpn edytował ten post 24 lutego 2015 - 15:17

  • 0





Podone tematy Collapse

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych