Próbuję wykonać zapytanie do bazy danych przy użyciu CDbCriteria
w Yii 1
. To co robię to:
$criteria->addInCondition("t.id", $dealIdArr);
$criteria->order = "FIELD(t.id, $dealIdArr)";
I to jest ten $dealIdArr
i nie jest pusty:
Array ( [0] => 3 [1] => 2 )
Ale po uruchomieniu skryptu zwraca błąd:
CDbCommand nie wykonał instrukcji SQL: SQLSTATE [42S22]: Nie znaleziono kolumny: 1054 Nieznana kolumna „Tablica” w „klauzuli kolejności”.
Nie mogę zrozumieć, co jest z tym nie tak? Jakaś pomoc?
Odpowiedzi:
2 dla odpowiedzi № 1Obecnie dodajesz tablicę do obu warunków. Nie znam się zbyt dobrze na Yii, ale jestem całkiem pewien, że oczekuje ciągu dla kolejności - a nie tablicy.
Możesz implode()
przekonwertować go na ciąg.
$dealIdStr = implode(", ", $dealIdArr);
$criteria->addInCondition("t.id", $dealIdArr); // You can use array here
$criteria->order = "FIELD(t.id, $dealIdStr)"; // This expects a string
Ponieważ twoja tablica zawiera obecnie tylko liczby całkowite (3 i 2), nie musisz tego cytować - ale jeśli tablica z jakiegokolwiek powodu zawiera ciągi, musisz je zacytować w MySQL, wykonując
$dealIdStr = implode("", "", $dealIdArr);
$criteria->order = "FIELD(t.id, "$dealIdStr")";
Zwróć uwagę na dodane pojedyncze cudzysłowy.
Kiedy spróbujesz użyć tablicy jako łańcucha, PHP po prostu wypisze „Array”, co właśnie widzisz. A ponieważ nie jest cytowany, MySQL uważa, że jest kolumną, a nie łańcuchem.