Registrovat    Přihlášení
Domů Odkazy Fórum Ke stažení Web hosting Registrace do katalogů
Přihlásit
Jméno:

Heslo:

Pamatuj si mně



Zapomenuté heslo

Nová registrace
Partner a hosting webu
zserver.cz
Spolupráce
Odkazy
česká sociální síť rexVoX.com
Informace a projekty na rodinné domy naleznete v našem blogu.

Navštívit můžete také pasivní rodinné domy - dřevostavby, kde naleznete informace o pasivních stavbách.



Kategorie a fóra

Prohlížení tohoto vlákna:   1 Anonymní uživatelé





Problém s vyhledáváním záznamů v DB
Pokročilý
Členem od:
23:22 27.2.2007
Skupina:
Registrovaní uživatelé
Příspěvky: 43
Nepřipojen
Zdravím,

dostal jsem se do situace, kdy už nevím jak dál.

Programuji import XML dat do MYSQL. Problém mám se zavedením kategorií.
Procházím cyklem záznamy z XML. Vezmu název kategorie a pokud ji v tabulce nenajdu, tak ji zavedu a vrátím její ID. Problém je v tom, že když zavedu první kategorii a dostanu se k druhému výrobku, který má stejnou kategorii, tak mi již zavedenou kategorii nenajde a vrátí prázdný záznam. Tím je tato kategorie považovaná za novou a je opět zavedena.

Zkouším všechno možné, ale nevím jak dál, protože mi to vytvoří pro každý výrobek vlastní kategorii se stejným názvem. Po skončení importu, vidím přes PhPMyAdmin všechny jednotlivé kategorie zavedené.

function UlozKategorie($kategorie) {
global $db;

$l = $_SESSION['languages_id'];
$k = explode(" | ", $kategorie);
$p_k = 0; // parent_kategorie_id
$i = 0;
foreach ($k as $kn) {
//echo "<br>($kn), [" . trim($kn) . "]";
$sql = 'SELECT categories_id, categories_name FROM ' .
TABLE_CATEGORIES_DESCRIPTION . ' WHERE categories_name = "' . $kn . '"';
$c = $db->Execute($sql); // zjistim jestli je kategorie s názvem $kn zavedená

if($c->RecordCount() > 0) {
$AktKat = $c->fields['categories_id'];
$p_k = $AktKat;
echo "<br>kategories existuje a ID = " . $AktKat;
} else {

$sql = 'INSERT INTO ' . TABLE_CATEGORIES . ' (parent_id, date_added,
last_modified, categories_status) VALUES ';
$sql .= '(' . $p_k . ', now(), now(), 1)';
$c = $db->Execute($sql);

$AktKat = $db->insert_ID();
$p_k = $AktKat;
echo "<br>ID nove kategorie = " . $AktKat;
$sql = 'INSERT INTO ' . TABLE_CATEGORIES_DESCRIPTION . ' (categories_id,
language_id, categories_name) VALUES ';
$sql .= '(' . $AktKat . ', ' . $l . ', "' . $kn . '")';
$c = $db->Execute($sql);

$sql = 'SELECT c.categories_id, c.parent_id, cd.categories_name
FROM ' . TABLE_CATEGORIES . ' c INNER JOIN ' . TABLE_CATEGORIES_DESCRIPTION . '
cd ON c.categories_id = cd.categories_id WHERE cd.categories_name = "' . $kn . '"';
$c = $db->Execute($sql);

if($c->RecordCount() > 0) {
echo "<br>kategorie byla zavedena. ID = " . $c->fields['categories_id'] . ",
Parent_id = " . $c->fields['parent_id'] . " Nazev = " . $c->fields['categories_name'];
}
}
$i++;
}
echo "Vracim ID vybrane kategorie [" . $AktKat . "]";
return $AktKat;
}

Napadlo mě, že by problémem mohlo být nějaké zdržení mezi založením kategorie a následným dotazem zda záznam již existuje, ale nevím jak to zjistit.

nemáte někdo radu kde co dělám špatně?

díky za nakopnutí Borek

Zasláno: 12:52 16.11.2018
_________________
Borek
Přenos příspěvku do ostatních aplikací Přenos


Re: Problém s vyhledáváním záznamů v DB
Guru
Členem od:
21:36 5.12.2008
Skupina:
Registrovaní uživatelé
Příspěvky: 746
Nepřipojen
Šel bych po důvodu, proč ji ten SELECT nenajde.

Náhradní řešení je přidávat si názvy kategorií uvnitř cyklu do pole a v něm kontrolovat duplicitu.

Zasláno: 9:05 19.11.2018
_________________
Shopy: www.centrum-matraci.cz
Když máš nápad, o kterém si myslíš, že by mohl fungovat, zřejmně by mohl fungovat, ale to se nedozvíš dokud ho ze 100% nezrealizuješ. Takže to prostě udělej !!!
.... a pokud se to týká webu, tak ho hlavně předem zazálohuj :)
Přenos příspěvku do ostatních aplikací Přenos


Re: Problém s vyhledáváním záznamů v DB
Pokročilý
Členem od:
23:22 27.2.2007
Skupina:
Registrovaní uživatelé
Příspěvky: 43
Nepřipojen
Zdravím,

právě, že mi to není jasné. Nevím jak to otestovat.
Podle výpisu z ladění mi SELECT nevrátí nic, ale když odešlu INSERT, tak se data zapíšou, protože vrátí ID posledního zapsaného záznamu.
Zkoušel jsem v různých částech rutiny vložit další SELECT, jestli vrátí něco jiného, ale pořád je to prázdné.
Když skončí běh rutiny a vezmu vypsané dotazy, tak mi vrátí všechny zapsané položky tedy každá kategorie je zapsaná tolikrát, kolikrát je v XML výrobek s uvedenou kategorií.

Nejhorší na tom je, že jsem podobný importní modul psal už několikrát a bez problémů. A teď jsem se zasekl a nevím kde je problém.

Jdu dál zkoušet
díky Borek

Zasláno: 21:00 20.11.2018
_________________
Borek
Přenos příspěvku do ostatních aplikací Přenos


Re: Problém s vyhledáváním záznamů v DB
Guru
Členem od:
21:36 5.12.2008
Skupina:
Registrovaní uživatelé
Příspěvky: 746
Nepřipojen
Nejprve bych zjišťoval jestli ten select selectuje vůbec něco, včetně kategorií, které jsou tam už dávno.

Potom bych se uchýlil k načtení všech kategorií do pole a existenci ověřoval v něm.

Například "' . $kn . '" bývá obvykle obráceně '".$kn."' - s apostrofy a uvozovkami si člověk může dost užít.

Potom bych zadal názvy tabulek raději natvrdo namísto define zástupců.

Zasláno: 21:15 20.11.2018
_________________
Shopy: www.centrum-matraci.cz
Když máš nápad, o kterém si myslíš, že by mohl fungovat, zřejmně by mohl fungovat, ale to se nedozvíš dokud ho ze 100% nezrealizuješ. Takže to prostě udělej !!!
.... a pokud se to týká webu, tak ho hlavně předem zazálohuj :)
Přenos příspěvku do ostatních aplikací Přenos


Re: Problém s vyhledáváním záznamů v DB
Pokročilý
Členem od:
23:22 27.2.2007
Skupina:
Registrovaní uživatelé
Příspěvky: 43
Nepřipojen
To je právě ono.
V rámci této funkce mi vrací dotaz prázdný záznam.
Když se vrátím do nadřazené funkce (odkud tuto volám) a nechám si vypsat stejný dotaz, tak tak záznamy již jsou

Budu zkoušet ještě další varianty

díky Borek

Zasláno: 11:29 21.11.2018
_________________
Borek
Přenos příspěvku do ostatních aplikací Přenos


Re: Problém s vyhledáváním záznamů v DB
Guru
Členem od:
21:36 5.12.2008
Skupina:
Registrovaní uživatelé
Příspěvky: 746
Nepřipojen
Global $db tam máš, tak by bylo zvláštní, že by nějeké execute prošlo a jiné ne.

A co tohle?

$k = explode(" | ", $kategorie);

kolem | máš mezery - jsou i v tom řetězci, který exploduješ?

zkus to raději explodovat jen

$k = explode("|", $kategorie);

stejně tam máš potom trim, tak je to jedno

A taky to zkus namísto foreach s for s $k[0] ... atd. a nechal bych si to i vypsat ať vidíš co se to snažíš přesně z db selectovat za název.

Zasláno: 22:14 21.11.2018
_________________
Shopy: www.centrum-matraci.cz
Když máš nápad, o kterém si myslíš, že by mohl fungovat, zřejmně by mohl fungovat, ale to se nedozvíš dokud ho ze 100% nezrealizuješ. Takže to prostě udělej !!!
.... a pokud se to týká webu, tak ho hlavně předem zazálohuj :)
Přenos příspěvku do ostatních aplikací Přenos


Re: Problém s vyhledáváním záznamů v DB
Pokročilý
Členem od:
23:22 27.2.2007
Skupina:
Registrovaní uživatelé
Příspěvky: 43
Nepřipojen
Zdravím,

tak jsem opět našel čas ladit script a fakt nevím co je špatně.
vytvořil jsem si pomocnou tabulku TABLE_KAT, je to spojení TABLE_CATEGORIES a TABLE_CATEGORIES_DESCRIPTION
pro test mi to stačí
Tady je celá funkce vytváření kategorií:

function CreateKAT($k) {
global $db;
$l = $_SESSION['languages_id'];
$kat = explode("|", $k);
$p_k = 0; // parent_kategorie_id
$i = 0;
echo "Spusteno CreateKAT, $k<br>";
print_r($kat);
echo "<br>count KAT = " . count($kat);
for($i=0; $i<count($kat); $i++) {
$nk = trim($kat[$i]);
$sql = "SELECT categories_id, categories_name, parent_id FROM " . TABLE_KAT;
$mc = $db->Execute($sql);
echo "nyni je zavedeno " . $mc->RecordCount() . " zaznamu<br>";
if($mc->RecordCount() > 0) { // nactu vsechny zaznamy a pokusim se vypsat HEX kody stringu
echo "HEX NK = [" . strToHex($nk) . "]<br>";
echo "HEX = [" . strToHex($mc->fields['categories_name']) . "]<br>";
}
$sql = "SELECT categories_id, categories_name, parent_id FROM " . TABLE_KAT . " WHERE categories_name = '" . $nk . "'";
$c = $db->Execute($sql);
if($c->RecordCount() > 0) {
$CatId = $c->fields['categories_id'];
$p_k = $c->fields['parent_id'];
echo "kategorie (" . $nk . ") existuje a ma ID = " . $CatId . "<br>";

} else {
echo "kategorie (" . $nk . ") NEEXISTUJE<br>";
$sql = "INSERT INTO " . TABLE_KAT . " (parent_id, categories_name, categories_status) VALUES (" . $p_k . ", '" . $nk . "', 1)";
$m = $db->Execute($sql);
$CatId = $db->insert_ID();
$p_k = $CatId;
echo "<br>SQL INSERT - vytvorena kategorie (id = $CatId|$nk) = " . $sql;
}
}
echo "<br>ID kategorie = $CatId, kategorie END - obsazena pamet = " . memory_get_usage() . "<br><br>";
return $CatId;
}
1. rozložím string s názvy kategorií oddělených |
2. procházím vzniklé pole
3. do $nk vložím jen název kategorie
4. zbytečný dotaz na DB, jen zjišťuji, kolik mi vrátí všech záznamů z tabulky
5. jestli je počet záznamů větší než 0 tak se pokouším vypsat HEX kody stringu (jestli nemám problém v kódování)
ale nespustí se
6. vyhledám název kategorie v tabulce
7. když je nalezena vrátím její categories_id a parent_id
8. když neexistuje tak ji vytvořím a uložím do DB
9. podle posledního uloženého ID zjistím categories_id a to samé vložím do Parent_id
10. tak projdu celé pole a vrátím číslo poslední kategorie z proměnné $k

to předám nadřazené funkci a uložím výrobek a vytvořím i záznam do TABLE_PRODUCTS_TO_CATEGORIES

když projdu další výrobek, spustím funkci CreateKAT znovu s aktuálním $k

Ale pořád to zavádí každou kategorii znova.
Ještě přikládám výpis z průchodu scriptem
každý výrobek začíná pořadím

díky za Váš čas

Borek

Zasláno: 20:44 3.12.2018
_________________
Borek
Přenos příspěvku do ostatních aplikací Přenos


Re: Problém s vyhledáváním záznamů v DB
Pokročilý
Členem od:
23:22 27.2.2007
Skupina:
Registrovaní uživatelé
Příspěvky: 43
Nepřipojen
chtěl jsem přiložit html s výpisem z obrazovky s ladícími údaji, ale nepodařilo se mi to.

Zasláno: 20:46 3.12.2018
_________________
Borek
Přenos příspěvku do ostatních aplikací Přenos






Můžete prohlížet témata.
Nemůžete zakládat nová témata.
Nemůžete odpovídat na příspěvky.
Nemůžete editovat Vaše příspěvky.
Nemůžete mazat Vaše příspěvky.
Nemůžete přidávat nové ankety.
Můžete hlasovat v anketách.
Nemůžete připojovat soubory k příspěvkům.
Nemůžete přispívat bez schválení.

[Rozšířené hledání]


Odkazy



Zen-Cart ke stažení

Vyšel nový Zencart 1.5.0

Originální moduly můžete stahovat na
www.zen-cart.com

Reklama
Nejaktivnější autoři
1 Melodic
Melodic
1002997
2 Kozoroh
Kozoroh
2124
3 JardaR
JardaR
1888
4 garden
garden
1419
5 Nismo
Nismo
1389
6 hbxx 1131
7 jandik01
jandik01
1070
8 PeterB
PeterB
1017
9 Dedek
Dedek
990
10 bambulko
bambulko
775