Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka - zapytania do kilku tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
Taz40
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
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
Właśnie tego typu zapytania też próbowałem, niestety bez skutecznie.
Mimo wszystko dzięki.

Pozdrawiam - Taz40
scanner
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
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
Jeśli coś sie powtarza, trzeba to aliasować poprzez AS. Miałem niedawno własnie taki problem przy JOINowaniu kilku tabel.
kurtz
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.