Mysql sorguda kullanılan tabloları numaralandırma?

3 Cevap php

Mysql sorguda kullanılan tabloları numaralandırmak için herhangi bir yolu var mı?

Ben sorgu var diyelim:

SELECT * FROM   db_people.people_facts pf
INNER JOIN db_system.connections sm ON sm.source_id = pf.object_id
INNER JOIN db_people.people p ON sm.target_id = p.object_id
ORDER BY pf.object_id DESC

Ve dönüş dizide istiyorum:

$tables = array(
[0] => 'db_people.people_facts',
[1] => 'db_system.connections',
[2] => 'db_people.people',
);

PS. Thanks everyone for answers :)

3 Cevap

Iyi işaretlenmiş çözümü sadece sonuç tabloları dönecektir. Ama sonraki sorgu yaparsanız başarısız olur:

SELECT users.* FROM users, cats, dogs WHERE users.id = cats.user_id

Will return only users değil, kediler ve köpekler tablolar.

En iyi çözüm iyi bir ayrıştırıcı bulmak, başka bir çözüm (bir sonraki link daha fazla bilgi) regex kullanarak ve sorgu AÇIKLAYINIZ edilir:

http://stackoverflow.com/questions/3397568/get-mysql-tables-in-a-query

Ama başka iyi bir çözüm list all tables and search them inside the query , sen tabloların listesini önbelleğe olduğunu düşünüyorum.

EDIT: tablolar ararken, daha iyi bir gebelik gibi kullanın:

// (`|'|"| )table_name(\1|$)
if(preg_match('/(`|\'|"| )table_name(\1|$)/i', $query))
    // found

Eğer değilse, örneğin "table_name2" ile yanlış pozitif dönebilirsiniz, "table_name3" ... table_name BULUNDU iki kez dönecektir.

Sizin için kullanarak konum ne bağlı olarak, MySQL en AÇIKLAYINIZ sizin için hile yapabilir:

http://dev.mysql.com/doc/refman/5.0/en/explain.html