[spostrzeżenie] Błąd: Coyote + MySQL5

0

Co prawda Coyote obsługuje MySQL3.x oraz MySQL4.x postanowiłem, korzystając z obsługi MySQL4.x przetestować MySQL5.x .

Od razu zaznaczę, że nie ruszyło. MySQL5.0 powstał, aby przybliżyć ten system ku oficjalnemu standardowi SQL, jak również rozbudować system o pewne elementy, które inne systemy zarządzania baz danych mają od dawna, jak na przykład triggery; ale ja nie o tym.

Sprostanie standardowi SQL w MySQL5.x wiąże się z tym, że pewne polecenia (w tym wiele wariantów JOIN) mają zmodyfikowaną dopuszczalną składnię.

(Coyote/index.php) Linia około 53:

$sql = 'SELECT article_subject,
                 article_namespace,
                 text_content,
                 cat_id
          FROM ' . ARTICLE_TABLE . ', ' . TEXT_TABLE . '
          LEFT JOIN ' . CAT_TABLE . ' ON cat_article = article_id
          WHERE text_id = article_id
                AND text_current = 1
                AND article_exists = 1
          ORDER BY text_time
          DESC
          LIMIT 1';

Powyższy kod nie działa. Nawet wpisując jego treść (oczywiście z danymi), bezpośrednio w konsolowym kliencie.

Zastanawiałem sie, czy nie byłoby opłacalnym wprowadzenie warstwy pośredniej, czyli: kod SQL nie byłby umieszczony w pliku /index.php, ale na przykład w /include/db/%BAZA%/index.php w postaci funkcji, używanej przez /index.php. Po podmiane bazy, dostępne byłyby analogiczne funkcje, ale mogące posługiwać się innym kodem SQL.

To tyle z moich spostrzeżeń na dziś. :)

0

cały problem polega na tym, ze MySQL5 jakby nie widzi tabeli ARTICLE_TABLE, bo jest wczesniej niz TEXT_TABLE. Tu pomaga zamiana tych 2 tabel miejscami.

Doszedłem do wniosku, że tabela która jest używana w JOIN musi byc na koncu FROM.

Gorzej jest z forum, gdzie sa 2 JOIN'y z 2 roznych tabel. Tam nie dałem rady :(

0

Nie próbowałem, ale może trzeba użyć po prostu aliasów tabel.

0

próbowałem, i nie pomaga :/ Tak jakby MySQL 5.X* widzi tylko ostatnią tabelę z FROM w JOIN'ach :/
Nawet gdzies na bugliscie MySQL'a jest o tym.

*) Testowałem na mysql 5.0.15 i 5.0.16 (tu mowili ze poprawili to)

0

Wow, nic o tym nie wiadomo... hmm... ale jset to bug (jak mowile nav)?
Moim zdaniem nie ma co wprowadzac takiego systemu, ale w razie czego w pliku gdzie jest takie zapytanie zrobic:

switch (SQL_LAYER) 
{
   case 'mysql5':
   { kod }
   break;
  
   default:

   {  kod dla MySQL 3 i 4 } 
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1