joost

Рейтинг
844
Регистрация
08.06.2006

Мне нужно из z_admitad_product_data выбрать post_id, для которых в z_postmeta нет записи с z_postmeta.meta_key = '_wp_attached_file'

для понимания и полной картины

-- Структура таблицы `z_postmeta`

--

CREATE TABLE IF NOT EXISTS `z_postmeta` (
`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`meta_key` varchar(255) DEFAULT NULL,
`meta_value` longtext,
PRIMARY KEY (`meta_id`),
KEY `post_id` (`post_id`),
KEY `meta_key` (`meta_key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=215785 ;

-- Структура таблицы `z_admitad_product_data`

--

CREATE TABLE IF NOT EXISTS `z_admitad_product_data` (
`post_id` int(11) NOT NULL,
`price` decimal(10,2) NOT NULL,
`old_price` decimal(10,2) DEFAULT NULL,
`picture` varchar(150) NOT NULL,
`vendor` varchar(150) NOT NULL,
`model` varchar(150) NOT NULL,
`id_item` bigint(11) NOT NULL,
`url` varchar(500) DEFAULT NULL,
`id` varchar(500) DEFAULT NULL,
`currencyId` varchar(6) DEFAULT NULL,
`offer_id` int(11) DEFAULT NULL,
`attr_all` text NOT NULL,
UNIQUE KEY `post_id` (`post_id`),
KEY `id_item` (`id_item`),
KEY `picture` (`picture`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


---------- Добавлено 11.01.2017 в 12:39 ----------

Aisamiery:
Такие записи не попадут в выборку. Если вам нужны только посты у которых есть post_id в z_postmeta и z_admitad_product_data (в обоих таблицах) вам вместо LEFT JOIN нужен INNER JOIN

То есть INNER JOIN вернет пересечение таблиц, LEFT JOIN вернет всю таблицу A (слева) и совпадение с таблицей B (правой), RIGHT JOIN соответственно наоборот

http://eddnet.org/?p=1580

предпоследний

Aisamiery:
смущает where z_postmeta.post_id IS NULL Разве ID может быть NULL?

Его может не быть (точнее записи с таким ид)

Aisamiery, этого не может быть, но

Ответ MySQL: Документация

#1051 - Unknown table 'z_admitad_product_data'


---------- Добавлено 11.01.2017 в 12:12 ----------

а
select z_admitad_product_data.* from z_admitad_product_data LEFT JOIN z_postmeta ON z_admitad_product_data.post_id = z_postmeta.post_id where z_postmeta.meta_key <> '_wp_attached_file'

срабатывает не правильно

TF-Studio:
insert ignore быстрее будет и проще, если я правильно понял задачу

немного не правильно понял

мне условие когда запись есть тоже нужно обработать

Sitealert, да

спасибо за помощь!

Sitealert:
Это ещё что за $xml?

он же $reader

Sitealert:
joost, лови
while($reader->read()) {

if($reader->nodeType == XMLReader::ELEMENT) {
if($reader->localName == 'offer') {
print $reader->getAttribute('id')."\n";
$reader->read();
while ($reader->localName != 'offer') {
if($reader->nodeType == XMLReader::ELEMENT and $reader->localName == 'param') {
print $reader->getAttribute('name')."\n";
if($reader->nodeType == XMLReader::TEXT) {
print $reader->value."\n";
}
}
$reader->read();
}
}
}
}

Спасибо!

Но немного что-то не то

Для

$source = <<<XML

<?xml version="1.0"?>
<offers>
<offer available="true" id="O14112180643" type="vendor.model"><article>640295700752999</article><categoryId>1401000</categoryId><currencyId>RUR</currencyId><description>Комфортные треггинсы, содержат эластан для идеальной посадки, изделие дополнено кружевными вставками, широкий эластичный пояс, узкий крой штанин</description><model>Брюки Tom Tailor 640295700752999</model><modified_time>1482808144</modified_time><name>Брюки Tom Tailor 640295700752999</name><oldprice>4999</oldprice><param name="Пол">Женский</param><param name="Цвет">черный</param><param name="Размер" quantity="2" type="size" unit="EU">34/32</param><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-1b.jpg</picture><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-2b.jpg</picture><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-3b.jpg</picture><price>1500</price><topseller>false</topseller><topseller>false</topseller><url>https://ad.admitad.com/g/641a4c7cc1e181aacf623d89878ee1/?i=5&amp;ulp=http%3A%2F%2Ftom-tailor-online.ru%2Fshop%2Fproduct%2Fbrjuki-tom-tailor-640295700752999</url><vendor>tom tailor</vendor><vendorCode>640295700752999</vendorCode></offer>

<offer available="true" id="O14112180643" type="vendor.model"><article>640295700752999</article><categoryId>1401000</categoryId><currencyId>RUR</currencyId><description>Комфортные треггинсы, содержат эластан для идеальной посадки, изделие дополнено кружевными вставками, широкий эластичный пояс, узкий крой штанин</description><model>Брюки Tom Tailor 640295700752999</model><modified_time>1482808144</modified_time><name>Брюки Tom Tailor 640295700752999</name><oldprice>4999</oldprice><param name="Пол">Женский</param><param name="Цвет">черный</param><param name="Размер" quantity="2" type="size" unit="EU">34/32</param><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-1b.jpg</picture><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-2b.jpg</picture><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-3b.jpg</picture><price>1500</price><topseller>false</topseller><topseller>false</topseller><url>https://ad.admitad.com/g/641a4c7cc1e181aacf623d89878ee1/?i=5&amp;ulp=http%3A%2F%2Ftom-tailor-online.ru%2Fshop%2Fproduct%2Fbrjuki-tom-tailor-640295700752999</url><vendor>tom tailor</vendor><vendorCode>640295700752999</vendorCode></offer>
</offers>
XML;

результат

O14112180643
Пол
Цвет
Размер
O14112180643
Пол
Цвет
Размер

$reader->value видит как пустое или его не видит

---------- Добавлено 29.12.2016 в 14:56 ----------

$xml->read();

забыл после определения нужной ноды, чтобы далее прочитать

rereg:
Гуглим php xmlreader to array на php.net находим хороший пример - копипестим.

error_reporting(-1);
header("content-type: text/plain; charset=utf-8");
function xml2assoc(&$xml){
$assoc = array();
$n = 0;
while($xml->read()){
if($xml->nodeType == XMLReader::END_ELEMENT) break;
if($xml->nodeType == XMLReader::ELEMENT and !$xml->isEmptyElement){
$assoc[$n]['name'] = $xml->name;
if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value;
$assoc[$n]['val'] = xml2assoc($xml);
$n++;
}
else if($xml->isEmptyElement){
$assoc[$n]['name'] = $xml->name;
if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value;
$assoc[$n]['val'] = "";
$n++;
}
else if($xml->nodeType == XMLReader::TEXT) $assoc = $xml->value;
}
return $assoc;
}

$source = <<<XML
<?xml version="1.0"?>
<offers>
<offer available="true" id="O14112180643" type="vendor.model"><article>640295700752999</article><categoryId>1401000</categoryId><currencyId>RUR</currencyId><description>Комфортные треггинсы, содержат эластан для идеальной посадки, изделие дополнено кружевными вставками, широкий эластичный пояс, узкий крой штанин</description><model>Брюки Tom Tailor 640295700752999</model><modified_time>1482808144</modified_time><name>Брюки Tom Tailor 640295700752999</name><oldprice>4999</oldprice><param name="Пол">Женский</param><param name="Цвет">черный</param><param name="Размер" quantity="2" type="size" unit="EU">34/32</param><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-1b.jpg</picture><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-2b.jpg</picture><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-3b.jpg</picture><price>1500</price><topseller>false</topseller><topseller>false</topseller><url>https://ad.admitad.com/g/641a4c7cc1e181aacf623d89878ee1/?i=5&amp;ulp=http%3A%2F%2Ftom-tailor-online.ru%2Fshop%2Fproduct%2Fbrjuki-tom-tailor-640295700752999</url><vendor>tom tailor</vendor><vendorCode>640295700752999</vendorCode></offer>

<offer available="true" id="O14112180643" type="vendor.model"><article>640295700752999</article><categoryId>1401000</categoryId><currencyId>RUR</currencyId><description>Комфортные треггинсы, содержат эластан для идеальной посадки, изделие дополнено кружевными вставками, широкий эластичный пояс, узкий крой штанин</description><model>Брюки Tom Tailor 640295700752999</model><modified_time>1482808144</modified_time><name>Брюки Tom Tailor 640295700752999</name><oldprice>4999</oldprice><param name="Пол">Женский</param><param name="Цвет">черный</param><param name="Размер" quantity="2" type="size" unit="EU">34/32</param><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-1b.jpg</picture><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-2b.jpg</picture><picture>http://tom-tailor-online.ru/images/P0/02/07/98/99/brjuki-tom-tailor-chernyjj-640295700752999-3b.jpg</picture><price>1500</price><topseller>false</topseller><topseller>false</topseller><url>https://ad.admitad.com/g/641a4c7cc1e181aacf623d89878ee1/?i=5&amp;ulp=http%3A%2F%2Ftom-tailor-online.ru%2Fshop%2Fproduct%2Fbrjuki-tom-tailor-640295700752999</url><vendor>tom tailor</vendor><vendorCode>640295700752999</vendorCode></offer>
</offers>
XML;

$xml = new XMLReader();
$xml->XML($source);
$assoc = xml2assoc($xml);
print_r($assoc);

Чего там голову с утра ломать..

нужно не в массив складывать, а по одному элементу массива обрабатывать

как то никак не соображу как это реализовать использую приведенную функцию

rereg, все что в этом примере можно через simpleXML одним махом проще сделать

в том и дело, что мне не нужно складывать все в один массив (xml большой)

нужно работать по элементно

---------- Добавлено 29.12.2016 в 12:32 ----------

еще не могу понять сам прием

как if($xml->nodeType == XMLReader::TEXT) $assoc = $xml->value;

в нужные [$n]['val'] пишется текстовое значение без их указания ?

Евгений Русаченко, это были ошибки не пхп, а сервера

сначала что памяти мало

потом когда я выделил 1024 из 1024 доступных на вдс, то что-то с дальнейшей читаемостю файла (тоже ошибка сервера)

урл на xml в личку кинул

Всего: 3839