Just nu i M3-nätverket
Gå till innehåll

Två querys i samma SQL-fråga


Erland Segerstedt

Rekommendera Poster

Erland Segerstedt

Hej

 

Jag håller på och bygger om mitt bildarkiv, ska lägga över all information till MySQL.

 

Den nya databasen innehåller (just nu) två tabeller. Tabellen med bildtexterna är där all sökning sker.

 

Nu vill jag skapa ytterligare en sql-fråga som först tittar in i den lilla tabellen - hittar ett svar - tar svaret med sig till den stora tabellen via variabeln $sokstrang.

Går en sån fråga inlemmas i koden nedan:

 

<a href="#"  onclick="window.opener.location='index_phpkod.php?sokstrang = <?php echo $kommun;      ?>';
window.close();"> 
<?php  echo $kommun;   ?> </a>

 

 

Tack på förhand

Erland Segerstedt i Kusmark

 

<a href="#" onclick="window.opener.location='index_phpkod.php?sokstrang = <?php echo $kommun; ?>';
window.close();"> 
<?php echo $kommun; ?> </a>

Det är variabeln $kommun vars innehåll jag först vill söka svar på i den lilla tabellen - och svaret från den lilla tabellen läggas i variabeln $sokstrang; som sen går vidare till den stora tabellen.

Med hopp om svar

Erland Segerstedt

Länk till kommentar
Dela på andra webbplatser

Erland Segerstedt

Hur ser tabellerna ut? Vad innehåller de för kolumner?

 

Den stora bildnr, fotoplats, bildtext, osv

den lilla fotoplats, kommun, landskap, län och land

 

Min fungerande sql-fråga ser ut så här:

 

 

$sql = "SELECT *

FROM bildtexten

WHERE mysql_fritext LIKE '%".mysql_escape_string($_SESSION['sokstrang'])."%'

AND webb_ja='ja'

ORDER by bildnr_ID LIMIT $start, $limit";

 

/Erland

Länk till kommentar
Dela på andra webbplatser

SKriv lite mer detaljerat vad du vill ha ut i den riktiga sql-frågan

Länk till kommentar
Dela på andra webbplatser

Erland Segerstedt

SKriv lite mer detaljerat vad du vill ha ut i den riktiga sql-frågan

 

OK!

 

Jag vill i Tabell_B fråga efter hur många orter jag har varit till och fotograferat i utifrån t ex sökordet "Lappland".

Svaret som Tabell_B kommer med (olika många orter) ska bäras vidare till Tabell_A där fortsättningen på frågan som ställs är:

hur många bilder har jag från dessa samtliga orter?

 

Båda dessa frågor hoppas jag på från ett och samma klick.

 

Går det?

 

Med hopp

Erland Segerstedt

Länk till kommentar
Dela på andra webbplatser

är fotoplats en INT med koppling till en andra tabellen eller sträng?

Länk till kommentar
Dela på andra webbplatser

Erland Segerstedt

är fotoplats en INT med koppling till en andra tabellen eller sträng?

 

Fotoplats.Tabell_B är ett textfält kopplat relaterat till fotoplats.Tabell_A.

Länk till kommentar
Dela på andra webbplatser

Det du skriver stämmer inte riktigt överrens med hur din kod ser ut.

 

Kan du skriva ut alla tabellfält och fälttyp som de ser ut i databasen!?

 

 

Är Kommun samma sak som fotoplats där de är de som du tidigare nämnt och eftersom de är två separata fält i databasen så går det inte fram vad du menar.

 

Har du även en skiss på hur det ska se ut på sidan är det toppen

Länk till kommentar
Dela på andra webbplatser

Erland Segerstedt

SQL-koden jag visar ( i tidigare post ) söker enbart i Tabel_A - och den fungerar.Det jag önskar utveckla är en sql-fråga som först söker i kolumnen $kommun i Tabel_B, tar med sig svaret och fortsätter sökningen i kolumnen $fotoplats i Tabel_A.Kolumnen fotoplats innehåller samma info i båda tabellerna.

Tabel_A innehåller kolumnerna bildnr (INT - KEY), bildtext (textfält), fotoplats (textfält), osv...Tabel_B innehåller kolumnerna bildtext (textfält - KEY), fotoplats (textfält), kommun (textfält), landskap (textfält), osv...

Förlåt - men det är svårt att begripliggöra mina intentioner, hav tålamod.

Ha dé /Erland

Länk till kommentar
Dela på andra webbplatser

Du är ju sjukt luddig i dina formuleringar och det gör det inte bättre att du skriver samma sak om och om igen ugen att utveckla.

 

Du söker i ett fält som heter "mysql_fritext", sant?

 

Du vill att resultatet ska vara de "album" som matchar den sökningen där fältet mysql_fritext innehåller söksträngen och dessutom ta med hur många bilder som finns i det album?

Det ska inte göras någon fritextsökning bland några fält i bild-tabellen?

 

Då är det rätt enkelt.

SELECT *, (SELECT COUNT(*) FROM `tabell1` af
WHERE a.fotoplats= af.fotoplats) as antal FROM `tabell2` a 
WHERE a.mysql_fritext LIKE '%söksträng%'

Länk till kommentar
Dela på andra webbplatser

Erland Segerstedt

Tack för hjälpen Jonas_B thumbsup.gif

Så här ser koden ut just nu!

 

 

 

$sql = "SELECT *, (SELECT COUNT(*) FROM `fotoorter`

WHERE fotoplats LIKE '%".mysql_escape_string($_SESSION['sokstrang'])."%') as antal

 

FROM bildtexten, fotoorter

WHERE mysql_fritext LIKE '%".mysql_escape_string($_SESSION['sokstrang'])."%'

AND bildtexten.fotograferingsplats=fotoorter.fotoplats

ORDER by bildnr_ID DESC LIMIT $start, $limit";

 

 

Ha dé

Erland Segerstedt

 

Länk till kommentar
Dela på andra webbplatser

Erland Segerstedt

Hej

För några dar sen ställde jag en fråga här på forumet och fick bra med hjälp - tack till Jonas_B.

Jag får gott om träff med min nuvarande sql-fråga till mitt bildarkiv, allt bra så långt.

 

Men... kvalitén på svaret varierar.

T ex när jag frågar efter "Skellefteå kommun", som är både en organisation och ett geografiskt begrepp.

Jag har två tabeller; en med bildtexter och en med ett ortsregister.

Tabell_A innehåller kolumnerna: bildnr_ID (index), bildtext, fotoplats

(ex. på info: 12123, Skellefteå kommun gruppbild på kommunstyrelsen under mandatperioden 2010-2014, Skellefteå)

Tabell_B innehåller kolumnerna: fotoplats (index), kommun, landskap, län, land

(ex. på info: Skellefteå, Skellefteå kommun, Västerbotten, Västerbottens län, Sverige)

(ex. på info: Burträsk, Skellefteå kommun, Västerbotten, Västerbottens län, Sverige)

(ex. på info: Kusmark, Skellefteå kommun, Västerbotten, Västerbottens län, Sverige)

Kolumnerna fotoplats är varandras spegel.

 

Hur ställer jag en sql-fråga utan att kolumnernas innehåll smittas av varandra?

Eftersom jag först vill rikta frågan till Tabell_B och kommun-fältet och sen skicka frågan vidare till Tabell_A och fotoplats, allt för att få svar på min fråga hur många bilder har jag i mitt arkiv som svarar mot t ex "Skellefteå kommun" ?

 

Med hopp om svar

Erland Segerstedt, Kusmark

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

När man ska skriva en SQL-fråga så börjar man med det man vill ha fram. Du vill alltså ha fram ett antal bilder från Tabell_A:

 

SELECT COUNT(*) FROM Tabell_A

 

Sedan kommer vi in på vilka bilder du vill ha, vilket villkor vi ska sätta upp. Om jag förstår dig rätt vill du alltså ta fram de bilder där kolumnen kommun i Tabell_B har värdet 'Skellefteå kommun'. För att kunna få in ett villkor från Tabell_B i vårt urval ur Tabell_A måste vi koppla ihop tabellerna:

 

SELECT COUNT(*) FROM Tabell_A JOIN Tabell_B

 

För att kunna koppla ihop dem på ett vettigt sätt behöver vi något som är gemensamt, och om jag förstår dig rätt är det kolumnen fotoplats som är gemensam:

 

SELECT COUNT(*) FROM Tabell_A JOIN Tabell_B USING (fotoplats)

 

Slutligen villkoret:

 

SELECT COUNT(*) FROM Tabell_A JOIN Tabell_B USING (fotoplats) WHERE kommun = 'Skellefteå Kommun'

Länk till kommentar
Dela på andra webbplatser

Erland Segerstedt

SELECT COUNT(*) FROM Tabell_A JOIN Tabell_B USING (fotoplats) WHERE kommun = 'Skellefteå Kommun'

 

 

Ovanstående kod får jag till att fungera i phpMyAdmin - men inte på min hemsida.

 

Jag väljer att byta spår lite grand och ställer frågan så här så länge:

 

Går det att utifrån söksträngens variabel-namn välja vilken tabell och vilka kolumner som sql-frågan ska ställas till?

 

<a href="#" onclick="window.opener.location='index_phpkod.php?sokstrang= <?php echo $kommun;?>' ;window.close();">

<?php echo $kommun; ?></a>

 

Jag tänker: Söksträng_A pekar mot Tabell_B och kolumnen landskap;

Jag tänker: Söksträng_B pekar mot Tabell_B och kolumnen kommun;

Jag tänker: Söksträng_C pekar mot Tabell_B och kolumnen fotoplats;

osv...

 

 

if (isset($_REQUEST['sokstrang'])) {

 

$_SESSION['sokstrang'] = $_REQUEST['sokstrang'];

}

Går det (i koden ovan) att göra nån if-sats som väljer tabell/kolumn enligt önskemål?

 

 

Koden just nu på min hemsida ser ut som följer:

 

 

if (isset($_REQUEST['sokstrang'])) {

 

$_SESSION['sokstrang'] = $_REQUEST['sokstrang'];

}

 

$query = "SELECT COUNT(*) as num

FROM bildtexten

WHERE bildtext LIKE '%".mysql_escape_string($_SESSION['sokstrang'])."%'

ORDER BY bildnr_ID";

 

$sql = "SELECT * FROM bildtexten, fotoorter

WHERE bildtext LIKE '%".mysql_escape_string($_SESSION['sokstrang'])."%'

AND bildtexten.fotograferingsplats=fotoorter.fotograferingsplats

ORDER BY bildnr_ID LIMIT $start, $limit";

 

$result = mysql_query($sql);

if (!$result) die ("Database acssscess failed: " . mysql_error());

 

 

Erland Segerstedt

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...