Taz40
15.06.2003, 09:31:36
Witam!
Przeczytałem wczoraj wiekszość postów o zapytaniach do kilku tabel jednocześnie i prawde powiedziawszy wszystko już mi się miesza.
Wszędzie gdzie nie zajrzę widzę coś w stylu:
[php:1:b9a0de9e01]
<?
SELECT pole1.tabela1, pole1.tabela2 FROM tabela1, tabela2;
?>
[/php:1:b9a0de9e01]
Problem leży w tym, że zastosowałem to u siebie i niestety zamiast rezultatów wywala się błąd: "supplied argument is not a valid". Potrzebuję zapytać kilka tabel jednocześnie (powiedzmy 10) i wyświetlić wyniki. Mój kod wygląda tak:
[php:1:b9a0de9e01]
<?
require ("admin/config.php");
$connection = mysql_connect($dbhost, $dbusername, $dbpassword);
$key = "w"; //key pobierany jest z formularza
//to jest tylko na próbę
$result = mysql_db_query($dbname, "SELECT soft.site_down_arch, soft.site_down_cdr FROM site_down_arch, site_down_cdr WHERE soft LIKE '%$key%' ORDER BY id DESC ")
$row = mysql_fetch_array($result);
while ($id=$row["id"])
{
$soft = $row["soft"];
$url = $row["url"];
$size = $row["size"];
$pl_url = $row["pl_url"];
$pl_size = $row["pl_size"];
print "<p align="left"><a class="down" target="_blank" onMouseOver="overlib('<center><b>Rozmiar pliku: $size</b></center>')" onMouseOut="nd();" href="$url">$soft</a></p>";
$row = mysql_fetch_array($result);
}
?>[/php:1:b9a0de9e01]
Tabele, o których wspominałem mają postać:
[php:1:b9a0de9e01]
<?
CREATE TABLE site_down_cdr (
id int(15) NOT NULL auto_increment,
soft mediumtext NOT NULL,
url mediumtext NOT NULL,
size mediumtext NOT NULL,
pl_url mediumtext NOT NULL,
pl_size mediumtext NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
?>[/php:1:b9a0de9e01]
Wszystkie tabele maja jednakowe kolumny, a różnią się jedynie nazwą. Zwracam się w tym momencie o doradzenie mi jak to uryźć, bo napisać np. 10 osobnych zapytań do każdej tabeli owszem mogę, ale byloby to zbyt "toporne".
Pozdrawiam - Taz40
wojtek
15.06.2003, 11:29:13
Cytat
[php:1:f8fada324b]
<?
SELECT pole1.tabela1, pole1.tabela2 FROM tabela1, tabela2;
?>
[/php:1:f8fada324b]
Mi sie wydaje ze to powinno byc tak:
[php:1:f8fada324b]<?php
SELECT tabela1.pole1, tabela2.pole1 FROM tabela1, tabela2;
?>[/php:1:f8fada324b]
PS. Patrzalem tylko na to zapytanie, nie analizowalem calego kodu, wiec nie wiem czy zmiana tylko tej linijki rozwiaze problem.
Taz40
15.06.2003, 11:36:33
Właśnie tego typu zapytania też próbowałem, niestety bez skutecznie.
Mimo wszystko dzięki.
Pozdrawiam - Taz40
scanner
15.06.2003, 11:52:30
Wrzuć zapytanie do PhpMyAdmina i zobacz jaki bląd wywala. Pozatym czy nie powinno być:
Kod
SELECT
`site_down_arch`.`id` AS `id_arch`,
`site_down_arch`.`soft` AS `soft_arch`,
`site_down_cdr`.`id` AS `id_cdr`,
`site_down_cdr`.`soft` AS `soft_cdr`
FROM
`site_down_arch`,
`site_down_cdr`
WHERE
(`site_down_cdr`.`soft` LIKE '%$key%')
AND
(`site_down_arch`.`soft` LIKE '%$key%')
ORDER BY
`site_down_arch`.`id` DESC,
`site_down_cdr`.`id` DESC
NIe wiem jednak, czy to to czego potzrebujesz, bo nie wiem, co masz za dane i jak je chcesz wyświetlić.
Taz40
15.06.2003, 12:21:38
Cytat
Pozatym czy nie powinno być:
Kod
SELECT
`site_down_arch`.`id` AS `id_arch`,
`site_down_arch`.`soft` AS `soft_arch`,
`site_down_cdr`.`id` AS `id_cdr`,
`site_down_cdr`.`soft` AS `soft_cdr`
FROM
`site_down_arch`,
`site_down_cdr`
WHERE
(`site_down_cdr`.`soft` LIKE '%$key%')
AND
(`site_down_arch`.`soft` LIKE '%$key%')
ORDER BY
`site_down_arch`.`id` DESC,
`site_down_cdr`.`id` DESC
Twoje zapytanie jest jak najbardziej poprawne lecz aby osiągnąć rezultaty z wszystlich kolumn + wszystkich tabel to trzeba napisać więcej niż by to wyszło przy zapytaniu do kazdej tabeli z osobna. U mnie w po wzuceniu pytania do PhpMyAdmina wywalało ze 'id' jest dwuznaczne (coby potwierdzało dlaczego było brak rezultatów). Dałeś mi wiele do myślenia i wydaje mi się, że teraz już sobie z tym poradzę, bo wiem jak to konstruować. Wielkie thx.
scanner
15.06.2003, 12:36:10
Jeśli coś sie powtarza, trzeba to aliasować poprzez AS. Miałem niedawno własnie taki problem przy JOINowaniu kilku tabel.
kurtz
16.06.2003, 10:35:12
Cytat
Jeśli coś sie powtarza, trzeba to aliasować poprzez AS. Miałem niedawno własnie taki problem przy JOINowaniu kilku tabel.
asy nie sa potrzebne a pomagaja przy fetch_array. jesli korzystasz z fetch_row problem nie istnieje.
innym niezwkly skutecznym sposobem jest nie nazywanie pola indeksujacego w tabelki Id tylko IdKlucza IdFirmy IdProduktu .....
pozdrawiam