SELECT SUBSTRING(LEFT(configuration, LOCATE('abhol_firma', configuration) -30), LOCATE('treuhand_betrag', configuration) +22, 100) FROM tl_iso_product_collection_item WHERE LOCATE('abhol_firma', configuration) > 0 AND LOCATE('treuhand_betrag', configuration) > 0 ORDER BY id DESC LIMIT 1
Поэтому в основном мне нужно внедрить этот код в файл PHP и отобразить результат. Мой код до сих пор выглядит так:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$connection = mysqli_connect('localhost', 'user', 'pw', 'db');
$query = "SELECT SUBSTRING(LEFT(configuration, LOCATE('abhol_firma', configuration) -30), LOCATE('treuhand_betrag', configuration) +22, 100) FROM tl_iso_product_collection_item WHERE LOCATE('abhol_firma', configuration) > 0 AND LOCATE('treuhand_betrag', configuration) > 0 ORDER BY id DESC LIMIT 1";
$result = mysqli_query($connection, $query);
if($result === FALSE) {
echo mysqli_error($connection);
} else
while($row = mysqli_fetch_array($result)){
echo $row['configuration'];
}
mysqli_close($connection);
?>
Таблица tl_iso_product_collection_item: http://puu.sh/mUf65/b1498aa7fa.png
Состав: http://puu.sh/mUf78/f25448e1d7.png
Всякий раз, когда я пытаюсь выполнить это, появляется следующее сообщение:
Notice: Undefined index: configuration on line 12
Я попробовал буквально все, и я просто не знаю, где может быть проблема. Кто-нибудь может помочь? Заранее спасибо.
Всякий раз, когда вы используете функции для столбцов, вам необходимо назначить им псевдоним. Причина этого заключается в том, что вы можете использовать много столбцов в функции, и MySQL не будет автоматически знать, какой из них использовать для вывода с одним столбцом, и он сгенерирует вам имя столбца, подобное используемой вами функции.
Решение, с которым вы столкнулись, абсолютно справедливо. Однако для удобства чтения рекомендуется использовать псевдонимы и имена столбцов.
Таким образом, ваш запрос должен выглядеть так:
SELECT
SUBSTRING(LEFT(configuration,
LOCATE('abhol_firma', configuration) - 30),
LOCATE('treuhand_betrag', configuration) + 22,
100) as configuration /* note the alias here */
FROM
tl_iso_product_collection_item
WHERE
LOCATE('abhol_firma', configuration) > 0
AND LOCATE('treuhand_betrag', configuration) > 0
ORDER BY id DESC
LIMIT 1
Вам нужно назначить псевдоним столбца в этом запросе, так как вы используете функцию SUBQUERY, у которой нет имени, чтобы получить его напрямую через $row
массив.
$query =
"SELECT
SUBSTRING(LEFT(configuration, LOCATE('abhol_firma', configuration) -30) as configuration,
LOCATE('treuhand_betrag', configuration) +22, 100) as locate
FROM tl_iso_product_collection_item
WHERE LOCATE('abhol_firma', configuration) > 0
AND LOCATE('treuhand_betrag', configuration) > 0
ORDER BY id DESC
LIMIT 1";
замена
while($row = mysqli_fetch_array($result)){
echo $row['configuration'];
}
с
while($row = mysqli_fetch_array($result)){
print_r($row[0]);
}
решил проблему