2016-02-05 5 views
0

Так что я получил мой «маленький» код здесь:Найдите определенную строку после предыдущей команды найти

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

//Verbindung 
$connection = mysqli_connect('localhost', 'user', 'pw', 'db'); 

// search stuff 
// Treuhandbetrag case 1 
$suchstringanfang_treuhand1 = 'treuhand_betrag\"'; 
$suchstringende_treuhand1 = '\";'; 

// Treuhandbetrag case 2 
$suchstringanfang_treuhand2 = 'treuhand_price\"'; 
$suchstringende_treuhand2 = '\";'; 

//queries 
//Treuhandabfrage case 1 
$query_treuhand1 = "SELECT SUBSTRING(LEFT(configuration, LOCATE('$suchstringende_treuhand1', configuration) +0), LOCATE('$suchstringanfang_treuhand1', configuration) +0, 100) 
FROM tl_iso_product_collection_item 
WHERE LOCATE('$suchstringende_treuhand1', configuration) > 0 
AND LOCATE('$suchstringanfang_treuhand1', configuration) > 0 ORDER BY id DESC LIMIT 1"; 

//Treuhandabfrage case 2 
$query_treuhand2 = "SELECT SUBSTRING(LEFT(configuration, LOCATE('$suchstringende_treuhand2', configuration) +0), LOCATE('$suchstringanfang_treuhand2', configuration) +0, 100) 
FROM tl_iso_product_collection_item 
WHERE LOCATE('$suchstringende_treuhand2', configuration) > 0 
AND LOCATE('$suchstringanfang_treuhand2', configuration) > 0 ORDER BY id DESC LIMIT 1"; 

//results 
// Treuhandbetrag 
$result_treuhand1 = mysqli_query($connection, $query_treuhand1); 
$result_treuhand2 = mysqli_query($connection, $query_treuhand2); 

//Display results 
if($result_treuhand2 === FALSE) { 
    echo mysqli_error($connection); 
} else 
    while($row = mysqli_fetch_array($result_treuhand2)){ 
print_r($row[0]); 
} 

//Close connection 
mysqli_close($connection); 
?> 

То, что я в основном пытаюсь сделать, это найти строку между

treuhand_betrag

и СЛЕДУЮЩИЙ происходящий

«;

Это происходит потому, что ш op хранит все атрибутные данные в одном поле TEXT в базе данных. Я знаю, что это экстренное решение, но я отчаянно нуждаюсь в некоторой остановке. С моим кодом до сих пор он не даст мне никаких результатов. Если я заменил «, то есть что-то уникальное, например« treuhand_price », которое встречается только один раз в поле, я получаю желаемый результат.

Как поле TEXT могло бы выглядеть: Если кто-то дает всю информацию, вы можете ожидать поле содержит следующее, например:

a:14:{s:6:"roller";s:1:"9";s:16:"treuhand_abfrage";s:2:"37";s:15:"treuhand_betrag";s:4:"2000";s:13:"treuhand_price";s:2:"35";s:11:"abhol_firma";s:18:"NichtdieselbeFirma";s:13:"abhol_vorname";s:14:"AndererVorname";s:14:"abhol_nachname";s:15:"AndererNachname";s:12:"abhol_str_nr";s:15:"AndereStraße 7";s:9:"abhol_plz";s:6:"456465";s:9:"abhol_ort";s:12:"Dschingistan";s:10:"abhol_land";s:3:"Bla";s:13:"abhol_telefon";s:6:"564654";s:11:"abhol_email";s:10:"[email protected]";s:11:"bemerkungen";s:5:"aeawe";} 

Если кто-то не слишком заботится и не дает слишком много информации:

a:8:{s:6:"roller";s:1:"9";s:16:"treuhand_abfrage";s:2:"36";s:13:"treuhand_price";s:2:"35";s:13:"abhol_vorname";s:5:"Deniz";s:14:"abhol_nachname";s:5:"Cetin";s:12:"abhol_str_nr";s:10:"straße 38";s:9:"abhol_plz";s:5:"90461";s:9:"abhol_ort";s:9:"Nürnberg";} 

Я был бы очень рад, что о какой-то помощи или подсказки Заранее благодарю!

+0

i not realy understan вы. Вы хотите выбрать значение 2000 за первым treuhand_betrag? –

+0

^Да точно. Но и все значения, лежащие за другими полями abhol_ *. –

ответ

0

Это то, что вы хотите. его немного сложно. Поэтому я меняю строку (и строку поиска), чтобы получить остальное от нее с SUBSTR_INDEX. Я га изменить имя_поль к струне в этом образце

SELECT 
    SUBSTRING_INDEX(REVERSE(
    SUBSTRING_INDEX(SUBSTRING_INDEX(
    REVERSE('a:14:{s:6:"roller";s:1:"9";s:16:"treuhand_abfrage";s:2:"37";s:15:"treuhand_betrag";s:4:"2000";s:13:"treuhand_price";s:2:"35";s:11:"abhol_firma";s:18:"NichtdieselbeFirma";s:13:"abhol_vorname";s:14:"AndererVorname";s:14:"abhol_nachname";s:15:"AndererNachname";s:12:"abhol_str_nr";s:15:"AndereStraße 7";s:9:"abhol_plz";s:6:"456465";s:9:"abhol_ort";s:12:"Dschingistan";s:10:"abhol_land";s:3:"Bla";s:13:"abhol_telefon";s:6:"564654";s:11:"abhol_email";s:10:"[email protected]";s:11:"bemerkungen";s:5:"aeawe";}') 
    ,'garteb_dnahuert' 
    ,1),';"',-2)),'"',-1); 

Результат

пожалуйста, дайте мне знать, если это то, что вы ищете

я скопировать из моего ответа на mysql-клиент:

MariaDB [(none)]> SELECT 
    -> SUBSTRING_INDEX(REVERSE(
    -> SUBSTRING_INDEX(SUBSTRING_INDEX(
    -> REVERSE('a:14:{s:6:"roller";s:1:"9";s:16:"treuhand_abfrage";s:2:"37";s:15:"treuhand_betrag";s:4:"2000";s:13:"treuhand_price";s:2:"35";s:11:"abhol_firma";s:18:"NichtdieselbeFirma";s:13:"abhol_vorname";s:14:"AndererVorname";s:14:"abhol_nachname";s:15:"AndererNachname";s:12:"abhol_str_nr";s:15:"AndereStraße 7";s:9:"abhol_plz";s:6:"456465";s:9:"abhol_ort";s:12:"Dschingistan";s:10:"abhol_land";s:3:"Bla";s:13:"abhol_telefon";s:6:"564654";s:11:"abhol_email";s:10:"[email protected]";s:11:"bemerkungen";s:5:"aeawe";}') 
    ->  ,'garteb_dnahuert' 
    ->  ,1),';"',-2)),'"',-1); 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| SUBSTRING_INDEX(REVERSE(
    SUBSTRING_INDEX(SUBSTRING_INDEX(
    REVERSE('a:14:{s:6:"roller";s:1:"9";s:16:"treuhand_abfrage";s:2:"37";s:15:"treuhand_betrag";s:4:"2000";s:13:"treuhand_price";s:2:"35";s:11:"abhol_firma";s:18:"NichtdieselbeFirma";s:13:"abhol_v | 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| 2000                                                                | 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

MariaDB [(none)]> 
+0

, который не сделал трюк, я получаю сообщение об ошибке «Ошибка анализа: синтаксическая ошибка, неожиданный« ролик » Тем не менее, я больше ищу более конкретное решение: я ищу, скажем, что-то между «treuhand_betrag \» и следующим «\»; который был бы «; s: 4:« 2000 », правильно? Как мне добраться до этого результата? –

+0

@Deniz Gelion - я добавлю в свой ответ –

+0

измените последнее -1 на -2, чтобы получить; s: 4: «2000 –