Mysql zapytanie porównujące opisy

0

``
$p = file_get_contents('cos.txt', TRUE);
$plik = explode(",", $p);

$pytanie = "SELECT id_product, description, description_short, name
FROM sklep_product_lang
WHERE id_shop='2' and id_lang='8' and id_product in($p)";
if($w = $db->query($pytanie)){
while ($x = $w->fetch_array(MYSQLI_ASSOC))
{
$c[]=$x;
}
var_dump($c);
}
$question = "SELECT id_product, description, description_short, name
FROM sklep_product_lang
WHERE id_shop = '1' and id_lang = '8' and
description <> '".$c['description']."' and
description_short <> '".$c['description_short']."' and
name <> '".$c['name']."' and
id_product = '".$c['id_product']."' ";

if($q = $db->query($question)){
	while ($z = $q->fetch_array(MYSQLI_ASSOC)){


}

}

if (is_array($e)){
foreach($e as $data){
$sql1 = "UPDATE sklep_product_lang SET
description = '".$data['description']."' and
description_short = '".$data['description_short']."' and
name = '".$data['name']."'
WHERE
description <> '".$data['description']."' and
description_short <> '".$data['description_short']."' and
name <> '".$data['name']."' and
id_product = '".$data['id_product']."'
id_shop = '1' and id_lang = '8' ";
$r = $db->query($sql1);
}}
}

$db->close();
}
?>
``
Witam zaczynam przygodę z bazami danych i już mam problem który nie daje mi spokoju, chciałbym porównać opisy z poszczególnych sklepów internetowych jednak nie wiem w czym tkwi problem. Proszę o wyrozumiałość i pomoc. Skrypt ma za zadanie wychwycić różnice po czym poprawić je.

0

Ale masz problem z bazą czy PHP i algorytmem? Jak skladujesz te opisy? Jaki masz shemat bazy? Co znaczy porównać? Sprawdzić czy są takie same czy coś bardziej zaawansowanego.

0
Tomek Pycia napisał(a):

Ale masz problem z bazą czy PHP i algorytmem? Jak skladujesz te opisy? Jaki masz shemat bazy? Co znaczy porównać? Sprawdzić czy są takie same czy coś bardziej zaawansowanego.

Z bazą nie mam problemu to wszystko działa, sktypt php łączy się itd, jednak nie wiem jaką składnie zapytań sql mam zastosować by wybrać różnice z tej samej tabeli około 12 tyś rekordów na multistore, chciałbym aby skrypt ten wychwytywał różnice w opisie krótkim, długim, nazwie, z id_shop = 2 i id_lang = 8 z id_shop = 1 i id_lang = 8 następnie w miejsce różnic update z id_shop = 2 na id_shop=1, Jedynie sprawdzić czy są takie same, przechowywane jako wartość text.

1

Pierwsze zapytanie wyciąga wszystkie produkty które mają różnice na podanych przez ciebie kolumnach:

select p1.id_product from sklep_product_lang p1, sklep_product_lang p2  where p1.id_shop = 1 and p2.id_shop = 2 and p1.id_lang = 8 and p2.id_lang = 8 and p1.id_product = p2.id_product and (p1.description <> p2.description or p1.description_short <> p2.description_short or p1.name <> p2.name)

Drugie robi updata. Sprawdź najpier czy działa bo mogą byc jakieś błedy zwłaszcza że nie pracowałem z MySQL juz jakis czas.

update sklep_product_lang set description = (select p2.description from sklep_product_lang p2 where p2.id_product= sklep_product_lang.id_product and p2.id_shop = 2 and p2.id_lang = 8 ), 
							  description_short = (select p2.description_short from sklep_product_lang p2 where p2.id_product= sklep_product_lang.id_product and p2.id_shop = 2 and p2.id_lang = 8 ), 
							  name = (select p2.name from sklep_product_lang p2 where p2.id_product= sklep_product_lang.id_product and p2.id_shop = 2 and p2.id_lang = 8 ) 
							  where sklep_product_lang.id_product in (select p1.id_product from sklep_product_lang p1, sklep_product_lang p2  
																	  where p1.id_shop = 1 and p2.id_shop = 2 
																	  and p1.id_lang = 8 and p2.id_lang = 8 
																	  and p1.id_product = p2.id_product 
																	  and (p1.description <> p2.description or p1.description_short <> p2.description_short or p1.name <> p2.name)
									) 
							and sklep_product_langp.id_shop = 1 and sklep_product_langp.id_lang =8
0

#1054 - Nieznana kolumna 'sklep_product_langp.id_shop' w where clause
W update jak zmienię sklep_product_langp.id_shop na sklep_product_lang.id_shop to jest to sam jak zmienię na p1.id_shop również. Jak wymaże całe to dostaje
#1093 - You can't specify target table 'sklep_product_lang' for update in FROM clause
Select działa świetnie. Wielkie dzięki za twój czas :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1