Проблем с дублиращи се id-та в базата данни - opencart

Blinky

Owner
Здравейте,

Искам да попитам тези, които са имали подобен проблем как са го решили. Ето го съобщението:

Код:
[B]Warning[/B]: mysql_query() [[URL="http://bioshopzdrave.com/admin/function.mysql-query"]function.mysql-query[/URL]]: Unable to save result set in [B]/home/user/public_html/system/database/mysql.php[/B] on line [B]22[/B][B]Notice[/B]: Error: Subquery returns more than 1 row
Error No: 1242
SELECT  DISTINCT *, (SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR '  > ') FROM oc_category_path cp LEFT JOIN oc_category_description cd1  ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id) WHERE  cp.category_id = c.category_id AND cd1.language_id = 'x' GROUP BY  cp.category_id) AS path, (SELECT keyword FROM oc_url_alias WHERE query =  'category_id=xx') AS keyword FROM oc_category c LEFT JOIN  oc_category_description cd2 ON (c.category_id = cd2.category_id) WHERE  c.category_id = 'xx' AND cd2.language_id = '4' in [B]/home/user/public_html/system/database/mysql.php[/B] on line [B]50[/B]

Проблемът е с базата данни, като всеки път при влизане, редакция на продукт, категория и т.н., ми прави в базата дублаж с id (product_id=, category_id= и др.). Получава се в таблицата _url_alias, но реално все ми е чудно защо? Някой да го е имал този проблем и как го е решил, защото при сейф на даден продукт

Мерси предварително.
 
От: Проблем с дублиращи се id-та в базата данни - opencart

Явно си прехвърлял базата и нещо си омазал индексите.
Направи една инсталация на чисто и виж кой индекс ти липсва и го добави примерно чрез phpmyadmin
 
Да, направено е, но пак така. Знаеш ли какво, големия шит идва като започнеш да едитваш продукти, категории, производители и това е. Не знам защо, но минавам след това, зачиствам и пак същото. ;) Няма ли нещо да се инджектне като код, за да се фиксне. Защото вече 3ти път ще качвам базата. :)
 
От: Проблем с дублиращи се id-та в базата данни - opencart

Имаш вероятно някой модул който да ти записва в url_alias по няколко резултата за дадена категория, прозиводител, продукт - за това ти дава на 3 те проблем - като смятам че вероятно е това, но все пак без да се погледне не мога да ти гарантирам, та провери модулите които имаш за seo и тествай. Ако търсиш решение както е в момента Opencart-а без да махаш модули.

SELECT DISTINCT *, (SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR ' > ') FROM oc_category_path cp LEFT JOIN oc_category_description cd1 ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id) WHERE cp.category_id = c.category_id AND cd1.language_id = 'x' GROUP BY cp.category_id) AS path, (SELECT keyword FROM oc_url_alias WHERE query = 'category_id=xx') AS keyword FROM oc_category c LEFT JOIN oc_category_description cd2 ON (c.category_id = cd2.category_id) WHERE c.category_id = 'xx' AND cd2.language_id = '4'

Този код, би могъл да тръгне

SELECT DISTINCT *, (SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR ' > ') FROM oc_category_path cp LEFT JOIN oc_category_description cd1 ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id) WHERE cp.category_id = c.category_id AND cd1.language_id = 'x' GROUP BY cp.category_id) AS path, (SELECT keyword FROM oc_url_alias WHERE query = 'category_id=xx') AS keyword FROM oc_category c LEFT JOIN oc_category_description cd2 ON (c.category_id = cd2.category_id) WHERE c.category_id = 'xx' AND cd2.language_id = '4' LIMIT 1

като му сложиш LIMIT 1, тъй като както пише в грешката ти връща повече от 1 резултат, а то очаква 1
 
От: Проблем с дублиращи се id-та в базата данни - opencart

Това е големия проблем на ОС. Дизайна на БД е на ниво третокласник и по никакъв начин не се използват средствата на БД за осигуряване интегритета на данните.

По темата. Счупена база, няма занчение какви са причините. Само с това съобщение няма как да се хване. Трябва да се направи един дебъг на заявките и да се излови какво е конкретно. Ако не са много продуктите може да се окаже, че чиста инсталация ще е по-лесният вариант.
 
От: Проблем с дублиращи се id-та в базата данни - opencart

Здравейте,
Само да вмъкна, че LIMIT 1 би трябвало да е на второто субкуери, поне според мен.
Код:
SELECT  DISTINCT *, 
	(SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR '  > ') FROM oc_category_path cp 
	LEFT JOIN oc_category_description cd1  ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id)
	WHERE  cp.category_id = c.category_id AND cd1.language_id = 'x' GROUP BY  cp.category_id) AS path,
  	(SELECT keyword FROM oc_url_alias WHERE query =  'category_id=xx' LIMIT 1) AS keyword 
FROM oc_category c
LEFT JOIN  oc_category_description cd2 ON (c.category_id = cd2.category_id) WHERE  c.category_id = 'xx' AND cd2.language_id = '4'
Аз лично бих сложил индекс на полето `keyword`, а `query` бих направил уникално. Освен ако няма случай две страници да отварят едно и също съдържание.
Поздрави.

Поздрави,
 
От: Проблем с дублиращи се id-та в базата данни - opencart

@Blinky сложи си локално опен карт. Виж таблицата с алиасите какви индекси има. Би трябвало някой от уникалните такива да липсва на продуктовия ти сървър. После като зачистиш дублираното съдържание го добавяш с AFTER TABLE и си готов :).

@wuser замазването на положението не е решение. Особено ако преди това не се локализира проблема ;)
 
От: Проблем с дублиращи се id-та в базата данни - opencart

@AMitrev напълно съм съгласен че не е решение, както споменах и аз предполагам че е в url_alias, като вероятно е заради някой seo модул, но просто дадох варианта и за LIMIT 1
 
От: Проблем с дублиращи се id-та в базата данни - opencart

Дай резултата от тази заявка

Код:
SELECT * FROM oc_url_alias GROUP BY `query` HAVING count(*) > 1
 
От: Проблем с дублиращи се id-та в базата данни - opencart

@Blinky виж си всички таблици дали имат AI (auto increment) че ако не се прави правилно се губят и всичко у лево :).
Освен това изпълни тази заявка:
Код:
ALTER TABLE `oc_category_path` ADD PRIMARY KEY(category_id,path_id);
И ще ти изгърми с грешка, че има дублирано съдържание. Проблема ти е точно в тази таблица.
 
Последно редактирано:
От: Проблем с дублиращи се id-та в базата данни - opencart

Ако не се оправиш чукни в скайп след обяд. И нали си знаеш - архив на сайта и дъмп на БД :D
 
От: Проблем с дублиращи се id-та в базата данни - opencart

Или зарязвай тая помия докато е време
 
Re: От: Проблем с дублиращи се id-та в базата данни - opencart

Дай резултата от тази заявка

Код:
SELECT * FROM oc_url_alias GROUP BY `query` HAVING count(*) > 1

=

SELECT *
FROM oc_url_alias
GROUP BY `query`
HAVING count( * ) >1
LIMIT 0 , 30

+
category_id=69 1
Edit Edit Copy Copy Delete Delete 1054 category_id=70 1
Edit Edit Copy Copy Delete Delete 1060 product_id=46 1
Edit Edit Copy Copy Delete Delete 1057 product_id=66 1

Което са проблемните елементи. ;)
 
Re: От: Проблем с дублиращи се id-та в базата данни - opencart

Ако не се оправиш чукни в скайп след обяд. И нали си знаеш - архив на сайта и дъмп на БД :D

Да, баси шита човек. :) Ще видя какво мога да го измисля. Но ще се консултирам. Някакво странно мазало, което дори не сика да се оправя.

@AMitrev, защо ми е PRIMARY KEY. Проблемът се появява и при продуктите и производителите. Но таблицата е тази, да. ;)
 
От: Проблем с дублиращи се id-та в базата данни - opencart

@Blinky защото праймъри кей значи уникалност и ако при прехвърлянето си го замазал всичко отива по дяволите.
Най-добре направи EXPORT по правилния начин и премести всичко на ново стига да не е късно.
 
От: Re: От: Проблем с дублиращи се id-та в базата данни - opencart

Което са проблемните елементи. ;)
То е ясно, че са тези. Въпроса е как са се пръкнали и дали няма да се повтори проблема.
 
От: Проблем с дублиращи се id-та в базата данни - opencart

По спомен някой от СЕО модулите (разширенията) правеше подобен проблем.
Ако има такива пробва с изключването им да локализираш от кой точно.
Имаше подобна тема от преди година може би. Но пък може и да е съвсем друг бъг.
Поздрави.
 
Re: От: Re: От: Проблем с дублиращи се id-та в базата данни - opencart

То е ясно, че са тези. Въпроса е как са се пръкнали и дали няма да се повтори проблема.

Мисля, че ще се повтори, защото го оправях после пак си генерира дубликати и така.

@AMitrev, абе честно казано няма кой знае колко нови неща, но ако може да се закърпи сегашната, ще е по-добра опция. Реално всичко друго е ОК, но точно това не знам защо ми прави тази гадост. Явно не може да почне да създава от някакво id, а си генерира рандом ли....но в един момент видях, че няма оправия. :)
 

Горе