Çift iken döngü çalışmıyor

5 Cevap php

Ben StackOverflow verilmiş tavsiyelere dayanarak, aşağıda sorgu denedim ama işe yaramadı. Ben ne olursa olsun kod içeri ne tablo aşağıda aşağıdaki hata vermek, veritabanında "site" için 25 en son eklenen değerlerin listesini almak çalışıyorum:

Warning: mysql_fetch_array (): Verilen argüman hattı 82 domain.php geçerli MySQL result resource değildir

Hat 82 sahiptir while ($rowa = mysql_fetch_array($indexa))

Neden herhangi bir fikir çalışmıyor?

echo "<table class=\"samples\">";
$index = mysql_query("select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='sitefeather'");
while ($row = mysql_fetch_array($index))
{

$indexa = mysql_query("select site FROM index order by createdatetime desc limit 25");
while ($rowa = mysql_fetch_array($indexa))
{

  echo '<tr><td><a href="sitelookup3.php?entry='.urlencode($rowa['site']).'&searching=yes&search=search">'.$rowa['site'].'</a></td></tr>';
}

}
echo "</table>";

5 Cevap

Muhtemelen yerine orada bir değişken istiyorum index. Belki bu?

$indexa = mysql_query("select site FROM {$row['TABLE_NAME']} order by createdatetime desc limit 25");

Ancak, um ... ne yapıyorsun? Ben başarmak için çalışıyoruz tam olarak ne olduğunu bilmiyorum ama kafamda gidiyor çok yüksek alarm çanları vardır. Sorguda dinamik bir tablo adı olması büyük bir kırmızı bayrak ve kötü veritabanı tasarımı bir işaretidir.

Benim veri tabanı aynı yapıya sahip bir değişken tablo numarası vardır.

Bu kötü.

Bu tablolarda neler? Bize tek bir tabloya tüm bu verileri almak yardımcı olalım.

En basit yolu yerine tabloları "foo", "bar" ve "baz" olan, tek bir tablo oluşturmak şu anda içeri her satırı saklıyorsanız tablonun adını içeren ekstra bir sütunu olan tek bir tablo oluşturmak için dize değeri olarak "foo", "bar", ya da "baz" da içeren bir sütun.

Sorgu

select site FROM index order by createdatetime desc limit 25

çalışmak gerekir. "Index" ayrılmış bir sözcüktür.

Orada yerine de $ row ['table_name'] kullanmak istiyor musunuz?

$indexa = mysql_query("select site FROM " + $row['TABLE_NAME'] + " order by createdatetime desc limit 25");

Sizin innerquery dış sorgu ile alakalı değil, bu denemek isteyebilirsiniz

<?php
echo "<table class=\"samples\">";
$index = mysql_query("select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='jammulinks'");
while ($row = mysql_fetch_row($index))
{
$indexa = mysql_query("select site FROM $row[0] order by createdatetime desc limit 25");//assuming you have site and createddatetime column there.
while ($rowa = mysql_fetch_array($indexa))
{

  echo '<tr><td><a href="sitelookup3.php?entry='.urlencode($rowa['site']).'&searching=yes&search=search">'.$rowa['site'].'</a></td></tr>';
}

}
echo "</table>";
?>

Burada yapmaya çalıştığımız şey düşünüyorum, döndürülen tüm tablo isimleri bir SELECT yapmak için ilk sorgu ($ dizin) kullanmaktır. Bu durumda, böyle bir şey yapıyor olması gerekir:

echo "<table class=\"samples\">";
// Get a list of table names from the schema
$index = mysql_query("select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='sitefeather'");
while ($row = mysql_fetch_array($index))
{
    // For every table in the schema, select site from it
    $indexa = mysql_query("select site FROM {$row['table_name']} order by createdatetime desc limit 25");
    while ($rowa = mysql_fetch_array($indexa))
    {
        echo '<tr><td><a href="sitelookup3.php?entry='.urlencode($rowa['site']).'&searching=yes&search=search">'.$rowa['site'].'</a></td></tr>';
    }

}
echo "</table>";

Ben site sütunu sorguladığınız bazı tabloların var, ama farkında değil eğer hata olur emin değilim.

Eğer ters tırnakların ya da bir tablonun bir dereference olarak belirteci kaçmayı eğer tablo adları ve sütun için ayrılmış sözcükleri kullanabilirsiniz düşünün.

mysql> create table `index` ( id int(11) );
Query OK, 0 rows affected (0.06 sec)

mysql> show tables like 'index';
+----------------------------+
| Tables_in_umbrella (index) |
+----------------------------+
| index                      | 
+----------------------------+
1 row in set (0.00 sec)

mysql> select * from `index`;
Empty set (0.00 sec)